scrapy源码解读(一)框架整体结构

1、前言

阅读本文的前提是你已经对scrapy有了基本的认识,或是已经使用scrapy写过数据抓取项目。数据库

2、框架整体结构

scrapy框架由多个组件组合而成,要采集的数据通过网络响应后返回流过各个组件,通过一些处理(如格式校验,过滤去重,异常数据抛弃),最终保存到指定的文件或数据库中。网络

下面是scrapy data flow 图,你们应该不陌生吧。并发

scrapy data flow图

scrapy的数据流由执行引擎控制,各个组件的运行也是有执行引擎调度驱动运行的。框架

(1)第1步,肯定好咱们要采集的网站后,咱们会在start_urls或者start_requests方法中构造最初的数据抓取连接。执行引擎ENGINE经过读取SPIDERS模块的start_urls或start_requests方法的初始连接构形成request对象(网络请求对象)。scrapy

(2)第2步,request对象被引擎加入到SCHEDULER调度器的调度队列中,等待被调度。函数

(3)第3步,引擎获取一个request对象,并发起网络请求,在请求到达下载器以前,会先通过download middleware(下载器中间件),常见的下载器中间件有代理中间件,重试中间件,请求头中间件。下载中间件负责修改request对象(好比换个请求头,第4步)和处理response对象(好比将请求失败的request对象从新丢到调度器中等待下次的调度,第5步)。DOWNLOADER(下载器)就是负责发起请求并获取网站的响应。网站

(4)第6步,引擎获取网站的响应后,交给SPIDERS模块的回调函数去解析数据。第7步,而后引擎获取解析后的数据。第8步,引擎将数据交给ITEM PIPELINES模块处理数据,常见的处理有验证数据格式是否符合要求,数据是否重复,保存数据等。url

以上。代理

最后,咱们在阅读框架源码的时候也要注意常常去回顾数据流的流向,有助于加深对scrapy的理解。中间件

相关文章
相关标签/搜索