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

一、前言

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

二、框架总体结构

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

下面是scrapy data flow 图,大家应该不陌生吧。

scrapy data flow图

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

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

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

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

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

以上。

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

posted @ 2020-04-04 22:15  天意凉  阅读(428)  评论(0编辑  收藏  举报