Scrapy介绍

scrapy框架包含以下几个部分

  • Scrapy Engine 引擎
  • Spiders 爬虫
  • Scheduler 调度器
  • Downloader 下载器
  • Item Pipeline 项目管道
  • Downloader Middlewares 下载器中间件
  • Spider Middlewares 爬虫中间件

框架中有那么多部分组成,那每个部件都是用来做什么的?查阅官方文档后我有了以下结论

Scrapy Engine引擎

它是负责整个框架中信号,数据等传递功能。相当于是军队中的主公,任何事情必须经过它的手由它来决定这件事情由谁来负责。

Spiders爬虫

是这个框架中的军师,负责处理所有的Response,返回封装在Item中的数据包。如果有更深层的URL,它将返回给Scrapy Engine,再次调度。

Scheduler调度器

它是整个框架的秩序管理者,要想爬取URL必须得经过它的同意。它负责将引擎调度过来的请求整理在队列当中,当引擎需要时依次输出。相当于是主公的助手,负责整理军情。

Downloader下载器

相当于是军队中的探子,负责刺探军情。在框架中负责把请求下载下来,然后将Response交给引擎,再由引擎传递给Spider来处理。

Item Pipeline项目管道

负责将Spider返回过来的Item进行进一步处理,细节分析,存储,过滤等。做一些收尾工作,相当于是顾问,比军师还厉害的人物。

Download Middlewares下载中间件

下载功能的扩展包,可以理解成探子助手。

Spider Middlewares爬虫中间件

爬虫扩展包,理解为军师外援团。

再结合这张图片来梳理下框架的整个爬取过程是怎么样的

框架爬取过程

  1. 引擎从爬虫获取首个待爬取的链接url,并传递给调度器
  2. 调度器将链接存入队列
  3. 引擎向调度器请求要爬取的链接,并将请求得到的链接经下载器中间件传递给下载器
  4. 下载器从网上下载网页,下载后的网页经下载器中间件传递给引擎
  5. 引擎将网页通过爬虫中间件传递给爬虫
  6. 爬虫对网页进行解析,将得到的Items和新的链接经爬虫中间件交给引擎
  7. 引擎将从爬虫得到的Items交给项目管道,将新的链接请求requests交给调度器
  8. 此后循环直到没有待爬取的链接为止

分析到这里可能还是会有点不清楚,再结合上面军队的例子,我做了个文字版的军队情报处理的流程。相信能加深对Scrapy框架的理解。


  • 某天主公(Engine)收到了一封开战信(我们在执行Scrapy的请求:yeild)
  • 主公(Engine)安排助手(Scheduler)给他敌方的情报
  • 助手(Scheduler)把最新的情报以request的形式交给主公(Engine),主公看了后发现不够,还需要了解敌方有多少粮草,兵力多少,主将是谁等等。
  • 主公(Engine) 将需要探查的军情经过探子助手(Download Middlewares)交给了在前线的探子(Downloader)
  • 探子(Downloader)刺探玩军情后,以response的形式交给探子助手(Download Middlewares)跑回军营中交给主公(Engine)
  • 主公(Engine)得知军情后,需要对军情进行分析商讨战术,所以将情报经过军师外援团(Spider Middlewares)跑腿给到军师(Spider)
  • 军师(Spider)分析完情报后钻研出了战术,将战术以Items的形式经过军师外援团(Spider Middlewares)跑腿给到主公(Engine)
  • 主公(Engine)看了后觉得这份战术还需要完善,然后将Items交给了顾问(Item Pipeline),由它来做最后的细节处理,然后交给主公助手(Scheduler)保管好。

下一篇对Scrapy常用命令做一些分析。