- 管道的持久化存储:
    - 数据解析(爬虫类)
    - 将解析的数据封装到item类型的对象中(爬虫类)
    - 将item提交给管道:yield item(爬虫类)
    - 在官大类的process_item中接收item对象并且进行任意形式的持久化存储操作(管道类)
    - 在配置文件中开启管道
    - 细节:
        - 将爬取的数据进行备份?
            - 一个管道类对应一种平台的持久化存储
        - 有多个管道类是否意味着多个管道类都可以接受到爬虫文件提交的item?
            - 只有优先级最高的管道才可以接受到item,剩下的管道类是需要从优先级最高的管道类中接收item
- 基于Spider父类进行全站数据的爬取
    - 全站数据的爬取:将所有页码对应的页面数据进行爬取
    - 手动请求的发送(get):
        yield scrapy.Request(url,callback)
    - 对yield的总结:
        - 向管道提交item的时候:yield item
        - 手动请求发送:yield scrapy.Request(url,callback)
    - 手动发起post请求:
        yield scrapy.FormRequest(url,formdata,callback):formdata是一个字典表示的是请求参数
- scrapy五大核心组件
引擎(Scrapy)
    用来处理整个系统的数据流处理, 触发事务(框架核心)
调度器(Scheduler)
    用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
下载器(Downloader)
    用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
爬虫(Spiders)
    爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
项目管道(Pipeline)
    负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
- scrapy的请求传参
    - 作用:实现深度爬取。
    - 使用场景:如果使用scrapy爬取的数据没有存在同一张页面中
    - 传递item:yield scrapy.Request(url,callback,meta)
    - 接收item:response.meta
- 提升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
        CONCURRENT_REQUESTS = 100
        LOG_LEVEL = 'ERROR'
        COOKIES_ENABLED = False
        RETRY_ENABLED = False
        DOWNLOAD_TIMEOUT = 1
- scrapy的中间件
    - 爬虫中间件
    - 下载中间件(***):处于引擎和下载器之间
        - 作用:批量拦截所有的请求和响应
        - 为什么拦截请求
            - 篡改请求的头信息(UA伪装)
            - 修改请求对应的ip(代理)
        - 为什么拦截响应
            - 篡改响应数据,篡改响应对象
     - 爬取网易新闻的新闻标题和内容
    - selenium在scrapy中的使用流程
        - 在爬虫类中定义一个bro的属性,就是实例化的浏览器对象
        - 在爬虫类重写父类的一个closed(self,spider),在方法中关闭bro
        - 在中间件中进行浏览器自动化的操作
    - 作业:
        - 网易新闻
        - http://sc.chinaz.com/tupian/xingganmeinvtupian.html网站中的图片数据进行爬取
进入数据库:
mysql -uroot -p
创建表结构:
create table wangyi (title varchar(200),content varchar(9999));
显示表信息:
desc wangyi;
提交事物:
commit;
执行虫子:
scrapy crawl wangyi
![]()