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爬虫中间件
爬虫扩展包,理解为军师外援团。
再结合这张图片来梳理下框架的整个爬取过程是怎么样的
框架爬取过程
- 引擎从爬虫获取首个待爬取的链接url,并传递给调度器
- 调度器将链接存入队列
- 引擎向调度器请求要爬取的链接,并将请求得到的链接经下载器中间件传递给下载器
- 下载器从网上下载网页,下载后的网页经下载器中间件传递给引擎
- 引擎将网页通过爬虫中间件传递给爬虫
- 爬虫对网页进行解析,将得到的Items和新的链接经爬虫中间件交给引擎
- 引擎将从爬虫得到的Items交给项目管道,将新的链接请求requests交给调度器
- 此后循环直到没有待爬取的链接为止
分析到这里可能还是会有点不清楚,再结合上面军队的例子,我做了个文字版的军队情报处理的流程。相信能加深对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常用命令做一些分析。