【scrapy学习】-----架构
scrapy架构以及组件在系统中的数据流
架构结构图
组件
- ENGINE:负责控制数据流在系统中所有组件中流动,并在相关动作发生时触发事件。
- SCHEDULER(调度器):从引擎接受request并将它们入队,以便之后引擎请求它们时提供给引擎。
- DOWNLOADER(下载器):负责获取页面数据并提供给引擎,而后提供给spider。
- SPIDERS(爬虫):用于分析response并提供item(即获得的item)或额外跟进的URL的类,每个spider负责处理一个特定网站。
- ITEM PIPELINE(管道):负责处理被spider提取出来的item,典型的处理有清理、验证及持久化(例如存取到数据库中)。
- Downloader middlewares(下载器中间件):下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response,其提供了一个简便的机制,通过自定义代码来扩展scrapy功能。
- Spider middlewares(spider中间件):spider中间件是在引擎及spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests),其提供了一个简便的机制,通过自定义代码来扩展scrapy功能。
数据流向
- scrapy数据流由执行引擎(engine)控制,其基本过程为:
- 引擎从spider中获取到初始requests;
- 引擎将该requests放入调度器,并请求下一个要爬取的requests;
- 调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求request方向)转发给下载器(Downloader);
- 一旦页面下载完毕,下载器生成一个该页面的response,并将其通过下载中间件(返回response方向)发送给引擎;
- 引擎从下载器中接收到response并通过spider中间件(输入方向)发送给spider处理;
- spider处理response并返回爬取到的item及(跟进的)新的request给引擎;
- 引擎将(spider返回的)怕渠道的item给item pipeline,将(spider返回的)request给调度器;
- (从第二步)重复直到调度器中没有更多的request,引擎关闭该网站;