Skip to main content

建筑概述

本文档描述了Scrapy的架构及其组件如何交互。

概述

下图显示了Scrapy体系结构的概述及其组件以及系统内发生的数据流概要(由红色箭头显示)。组件的简要描述如下,包含有关它们的更详细信息的链接。下面还描述数据流。

数据流

Scrapy architecture

Scrapy中的数据流由执行引擎控制,如下所示:

  1. 发动机蜘蛛 获取初始请求以进行爬网。

  2. 发动机 调度 调度程序 中的请求,并请求下一个要抓取的请求。

  3. 调度程序发动机 返回下一个请求。

  4. 发动机 将请求发送到 下载器,通过 下载中间件 (参见 process_request())。

  5. 一旦页面完成下载,下载器 生成响应(与该页面),并将其发送到引擎,通过 下载中间件 (参见 process_response())。

  6. 发动机下载器 接收响应,并将其发送到 蜘蛛 用于处理,通过 蜘蛛中间件 (参见 process_spider_input())。

  7. 蜘蛛 处理响应并通过 蜘蛛中间件 (参见 process_spider_output())向 发动机 返回刮取的项目和新请求(要遵循)。

  8. 发动机 将处理的项目发送到 项目管道,然后将处理的请求发送到 调度程序,并请求可能的下一个请求进行爬网。

  9. 该过程重复(从步骤1)直到不再有来自 调度程序 的请求。

组件

Scrapy引擎

引擎负责控制系统的所有组件之间的数据流,并且在发生某些动作时触发事件。有关更多详细信息,请参阅上面的 数据流 部分。

调度程序

调度器接收来自引擎的请求,并且在发动机请求它们时将它们排队以供以后(也到引擎)。

下载器

下载器负责获取网页并将它们提供给引擎,然后引擎将它们提供给蜘蛛。

蜘蛛

Spider是由Scrapy用户编写的自定义类,用于解析响应并从其中提取项目(也称为“已抓取项目”)或其他请求。有关更多信息,请参阅 蜘蛛

项目管道

项目管道负责处理项目,一旦它们被蜘蛛提取(或刮除)。典型任务包括清理,验证和持久性(例如将项目存储在数据库中)。有关更多信息,请参阅 项目管道

下载中间件

下载器中间件是位于引擎和下载器之间的特定钩子,当它们从引擎传递到下载器时处理请求,以及从下载器传递到引擎的响应。

如果您需要执行以下操作之一,请使用Downloader中间件:

  • 在即将发送到下载器之前处理请求(即在Scrapy将请求发送到网站之前);

  • 在将其传递给蜘蛛之前改变接收到的响应;

  • 发送新的请求,而不是将接收到的响应传递给蜘蛛;

  • 在不获取网页的情况下向蜘蛛传递响应;

  • 默默地丢弃一些请求。

有关更多信息,请参阅 下载中间件

蜘蛛中间件

蜘蛛中间件是位于引擎和蜘蛛之间的特定钩子,能够处理蜘蛛的输入(响应)和输出(项目和请求)。

如果需要,使用Spider中间件

  • 后处理输出的蜘蛛回调 - 更改/添加/删除请求或项目;

  • 后处理开始请求;

  • 处理蜘蛛异常;

  • 调用errback而不是基于响应内容的某些请求的回调。

有关更多信息,请参阅 蜘蛛中间件

事件驱动的网络

Scrapy是用 Twisted 编写的,这是一个受欢迎的事件驱动的Python网络框架。因此,它使用非阻塞(也称为异步)代码实现并发。

有关异步编程和Twisted的更多信息,请参阅以下链接: