zoukankan      html  css  js  c++  java
  • scrapy知识点

    1.持久化存储
            - 编码流程:
                1.数据解析
                2.封装item类
                3.将解析的数据存储到实例化好的item对象
                4.提交item
                5.管道接收item然后对item进行io操作
                6.开启管道
             - 注意事项:
                - 将同一份数据存储到不同的平台中:
                    - 管道文件中一个管道类负责将item存储到某一个平台中
                    - 配置文件中设定管道类的优先级
                    - process_item方法中return item的操作将item传递给下一个即将被执行的管道类
        2.全站数据爬取
            - 手动请求的发送:
                - 设定一个通用的url模板
                - 手动i请求的操作写在哪里:parse方法
                - yield scrapy.Request(url,callback)
        3.五大核心组件

    猛击它

        4.post请求
            - start_requests(self)
            - post请求的手动发送:yield scrapy.FormRequest(url,callback,formdata)
            - COOKIES_ENNABLE = False
        5.日志等级和请求传参
            - LOG_LEVEL = 'ERROR'
            - LOG_FILE = 'path'
            - 请求传参的应用场景:
                - 爬取且解析的数据没有在同一张页面
                - 在请求方法中使用meta(字典)参数,该字典会传递给回调函数
                    - 回调函数接收meta:response.meta['key']

    - 下载中间件:
        - 作用:批量拦截请求和响应
        - 拦截请求:
            1.篡改请求头信息(User-Agent):
            2.设置相关请求对象的代理ip(process_exception中)
    - selenium如何作用在scrapy中:
        - 实例化一个浏览器对象(一次):spider的构造方法中

      - 在scrapy中如何给所有的请求对象尽可能多的设置不一样的请求载体身份标识
            - UA池,process_request(request)
        - 在scrapy中如何给发生异常的请求设置代理ip
            - ip池,process_exception(request,response,spider):request.meta['proxy'] = 'http://ip:port'
                - 将异常的请求拦截到之后,通过代理ip相关的操作,就可以将改异常的请求变成非异常的请求,然后必须重新
                    对该请求进行重新的请求发送:return request
        - 简述下载中间件的作用及其最重要三个方法的作用
            - process_request:拦截所有非异常的请求
            - process_response:拦截所有的响应对象
            - process_exception:拦截发生异常的请求对象,需要对异常的请求对象进行相关处理,让其变成
                正常的请求对象,然后通过return request 对该请求进行重新发送
        - 简述scrapy中什么时候需要使用selenium及其scrapy应用selenium的编码流程
            - 实例化浏览器对象(一次):spider的init方法
            - 需要编写浏览器自动化的操作(中间件的process_response)
            - 关闭浏览器(spider的closed方法中进行关闭操作)

    - 图片懒加载

       这是一种前端技术,缓解服务器压力,给用户更好的体验,他只对屏幕内的图片进行加载,其他的图片使用伪属性隐藏起来,当检测到屏幕要显示时,改变为原生属性,所以可以通过伪属性名获取图片地址。

    - 如何提升scrapy爬取数据的效率:

    默认scrapy开启的并发线程为32个,可以适当进行增加。在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100。

    降低日志级别:
        在运行scrapy时,会有大量日志信息的输出,为了减少CPU的使用率。可以设置log输出信息为INFO或者ERROR即可。在配置文件中编写:LOG_LEVEL = ‘INFO’

    禁止cookie:
        如果不是真的需要cookie,则在scrapy爬取数据时可以禁止cookie从而减少CPU的使用率,提升爬取效率。在配置文件中编写:COOKIES_ENABLED = False

    禁止重试:
        对失败的HTTP进行重新请求(重试)会减慢爬取速度,因此可以禁止重试。在配置文件中编写:RETRY_ENABLED = False

    减少下载超时:
        如果对一个非常慢的链接进行爬取,减少下载超时可以能让卡住的链接快速被放弃,从而提升效率。在配置文件中进行编写:DOWNLOAD_TIMEOUT = 10 超时时间为10s


    - crawlSpider
    crawlSpider全站数据爬取
        - crawlSpider就是spider一个子类(派生)
        - crawlSpider具有的机制:
            - 连接提取器
            - 规则解析器
        - 创建爬虫文件: scrapy  genspider  -t  crawl  spiderName  www.xxx.com

                   --此指令对比以前的指令多了 "-t crawl",表示创建的爬虫文件是基于CrawlSpider这个类的,而不再是Spider这个基类。
        - 深度爬取:

    增量式爬虫:

        - 概念:用来《检测》网站数据更新的情况。只会爬取网站中更新出来的新数据。
        - 核心:去重
     

                

  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/Wj-Li/p/10864893.html
Copyright © 2011-2022 走看看