理解Scrapy架构图
Scrapy 使用了 Twisted['twɪstɪd](其主要对手是 Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求
Scrapy Engine: 负责 Spider、ItemPipeline、Downloader、Scheduler 中间的通讯,信号、数据传递等
Scheduler(调度器): 它负责接受引擎发送过来的 Request 请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
Downloader:负责下载 Scrapy Engine(引擎)发送的所有 Requests 请求,并将其获取到的 Responses 交还给 Scrapy Engine(引擎),由引擎交给 Spider 来处理,
Spider:它负责处理所有 Responses,从中分析提取数据,获取 Item 字段需要的数据,并将需要跟进的 URL 提交给引擎,再次进入 Scheduler(调度器)
Item Pipeline(管道):它负责处理 Spider 中获取到的 Item,并进行进行后期处理(详细分析、过滤、存储等)的地方
Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
Spider Middlewares(Spider 中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider 中间通信的功能组件(比如进入 Spider 的 Responses;和从 Spider 出去的 Requests)
注意!只有当调度器中不存在任何 request 了,整个程序才会停止,(也就是说,对于下载失败的 URL,Scrapy 也会重新下载
在没有打开中间件的时候:
中间件的用途在爬取一些有反爬虫的网站时,我们可以在中间件中自写规则,比如加一些代理,session,cooks,或者使用selenium*面浏览器请求