scrapy架构初探

scrapy数据流

scrapy中的数据流由执行引擎控制,下面的原文摘自scrapy官网,我根据猜测做了点评,为进一步开发GooSeeker开源爬虫指示方向:

<李>

引擎得到第一个url从蜘蛛爬行和时间表调度器,请求。

URL谁来准备呢?看样子是蜘蛛自己来准备,那么可以猜测Scrapy架构部分(不包括蜘蛛)主要做事件调度,不管网址的存储。看起来类似GooSeeker会员中心的爬虫罗盘,为目标网站准备一批网址,放在罗盘中准备执行爬虫调度操作,所以,这个开源项目的下一个目标是把URL的管理放在一个集中的调度库里面。

<李>

引擎调度程序要求下一个URL来爬。

看到这里其实挺难理解的,要看一些其他文档才能理解透。接第1点,引擎从蜘蛛中把网址拿到以后,封装成一个请求,交给了事件循环,会被调度程序收来做调度管理的,暂且理解成对请求做排队。引擎现在就找调度器要接下来要下载的网页地址。

<李>

调度器返回下一个url爬到发动机和引擎将它们发送到下载器,通过下载中间件(请求方向)。

从调度器申请任务,把申请到的任务交给下载器,在下载器和引擎之间有个下载器中间件,这是作为一个开发框架的必备亮点,开发者可以在这里进行一些定制化扩展。

<李>

一旦页面完成下载下载器生成一个响应(页面)并将其发送给引擎,通过下载中间件(反应方向)。

下载完成了,产生一个反应,通过下载器中间件交给引擎。注意,响应和前面的请求的首字母都是大写,虽然我还没有看其它Scrapy文档,但是我猜测这是Scrapy框架内部的事件对象,也可以推测出是一个异步的事件驱动的引擎,就像DS打数机的三级事件循环一样,对于高性能,低开销引擎来说,这是必须的。

<李>

引擎接收下载器的响应并将其发送到蜘蛛进行处理,通过蜘蛛中间件(输入方向)。

再次出现一个中间件,给开发者足够的发挥空间。

<李>

蜘蛛过程响应并返回刮项目和新请求(遵循)引擎。

每个蜘蛛顺序抓取一个个网页,完成一个就构造另一个请求事件,开始另一个网页的抓取。

<李>

引擎通过刮项目和新请求返回的蜘蛛通过蜘蛛中间件(输出方向),然后发送处理的物品项目管道和处理请求的调度器。

引擎作事件分发

<李>

重复过程(从步骤1),直到没有更多的请求调度程序。

持续不断地运行。


scrapy架构初探