体系结构概述¶
本文描述了Scrapy的体系结构及其组件如何交互。
概述¶
下图显示了Scrapy架构及其组件的概述,以及系统内部发生的数据流的概要(以红色箭头显示)。下面提供了这些组件的简要说明以及有关它们的详细信息的链接。数据流也描述如下。
数据流¶
Scrapy中的数据流由执行引擎控制,如下所示:
这个 Engine 将请求发送到 Downloader ,通过 Downloader Middlewares (见
process_request()
)一旦页面完成下载, Downloader 生成响应(使用该页)并将其发送到引擎,并通过 Downloader Middlewares (见
process_response()
)这个 Engine 接收来自的响应 Downloader 并发送到 Spider 用于处理,通过 Spider Middleware (见
process_spider_input()
)这个 Spider 处理响应并向 Engine ,通过 Spider Middleware (见
process_spider_output()
)这个 Engine 将已处理的项目发送到 Item Pipelines ,然后将已处理的请求发送到 Scheduler 并请求可能的下一个爬行请求。
该过程重复(从步骤1开始),直到不再有来自 Scheduler .
组件¶
抓取式发动机¶
引擎负责控制系统所有组件之间的数据流,并在发生某些操作时触发事件。见 Data Flow 有关详细信息,请参阅上面的部分。
调度程序¶
这个 scheduler 接收来自引擎的请求,并将其排队,以便稍后在引擎请求它们时将其提供(也提供给引擎)。
下载器¶
下载者负责获取网页并将其送入引擎,引擎反过来又将网页送入蜘蛛。
蜘蛛¶
spider是Scrapy用户编写的自定义类,用于解析响应和提取 items 从他们或其他要求跟随。有关详细信息,请参阅 蜘蛛 .
项目管道¶
项目管道负责处理被蜘蛛提取(或 爬取 )的项目。典型的任务包括清理、验证和持久性(如将项目存储在数据库中)。有关详细信息,请参阅 项目管道 .
下载器中心件¶
下载器中间件是位于引擎和下载器之间的特定钩子,当它们从引擎传递到下载器时处理请求,以及从下载器传递到引擎的响应。
如果需要执行以下操作之一,请使用下载器中间件:
在将请求发送给下载者之前处理该请求(即在Scrapy将请求发送到网站之前);
变更在传递给spider之前收到响应;
发送新的请求,而不是将收到的响应传递给spider;
在不获取网页的情况下将响应传递给蜘蛛;
悄悄地放弃一些请求。
有关详细信息,请参阅 下载器中间件 .
蜘蛛中心件¶
蜘蛛中间件是位于引擎和蜘蛛之间的特定钩子,能够处理蜘蛛的输入(响应)和输出(项目和请求)。
如果需要,使用蜘蛛中间件
spider回调的后处理输出-更改/添加/删除请求或项;
后处理启动请求;
处理spider异常;
对一些基于响应内容的请求调用errback,而不是回调。
有关详细信息,请参阅 蜘蛛中间件 .
事件驱动的网络¶
Scrapy是用 Twisted 是一个流行的事件驱动的python网络框架。因此,它使用非阻塞(即异步)代码实现并发性。
有关异步编程和扭曲的更多信息,请参阅以下链接: