这张图展示了Scrapy的架构和各组件之间的关系
红色箭头为数据流动方向
数据流(Data Flow)通过引擎来控制,并且经过如下步骤来流动:
第一步:爬虫(SPIDERS)发送给引擎(ENGINE)一个最初的请求(REQUESTS); 第二步:引擎在调度程序(SCHEDULER)中安排当前请求,并要求下一个请求进入引擎; 第三步:调度程序给引擎返回一个请求(当前请求); 第四步:引擎通过下载中间件将请求发送给下载器(DOWNLODER); 第五步:一旦完成了页面的下载,下载器就生成一个响应(关于这个页面)并将响应通过下载中间件发送给引擎; 第六步:引擎接收来自下载器的响应并将响应通过爬虫中间件发送给爬虫; 第七步:爬虫处理响应并通过爬虫中间件返回裁剪好的数据并伴随一个新的请求给引擎; 第八步:引擎发送加工项目给数据永久化进行数据的保存,然后将处理过的请求发送给调度程序,并询问是否有下一个请求; 第九步:这个过程从步骤1开始重复直到调度程序没有请求为止;
组件介绍:
Engine:引擎是负责控制系统所有组件之间的数据流,和当某些事情发生时触发相应的事件; Scheduler:调度程序接收引擎的请求并将这些请求加入队列,以便在之后(也包括引擎)进行输出; Downloader:下载器负责抓取网页和将抓取到的数据发送给引擎,然后通过引擎发送给爬虫(Spiders); Spiders:用于下载数据的处理加工 Item Pipeline:数据相关的一个组建,负责清理、验证和持久性(如将项目存储在数据库中); Downloader middlewares:用于引擎和下载器之间的信息传递; Spider middlewares:用于引擎和爬虫之间的信息传递;