Scrapy架构概述

架构概述

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

概述

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

数据流

Scrapy架构

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

  1. 引擎从Spider获取初始爬行 请求

  2. 引擎在调度程序中调度请求 并请求下一个要抓取的请求

  3. 调度程序下一个请求返回给引擎

  4. 引擎通过 下载中间件将请求发送到 下载器(请参阅 参考资料 process_request()

  5. 一旦页面完成下载, 下载器就会生成一个响应(包含该页面)并将其发送到引擎,通过 下载器中间件(请参阅 参考资料 process_response())。

  6. Engine接收来自Downloader的 Response ,并通过Spider Middleware将其发送到 Spider进行处理请参阅 参考资料 )。process_spider_input()

  7. Spider处理 Response 并 通过 Spider Middleware(请参阅 参考资料)将抓取的项和新的Requests (后续)返回给Engineprocess_spider_output()

  8. 引擎将已处理的项目发送到 项目管道,然后将已处理的请求发送到调度程序请求可能的下一个爬网请求。

  9. 重复该过程(从步骤 3 开始),直到不再有来自 Scheduler 的 请求

成分

Scrapy引擎

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

调度程序

调度程序接收来自引擎的请求,并将它们排队以便稍后在引擎请求时将它们提供给它们(也提供给引擎)。

下载器

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

蜘蛛

蜘蛛是由 Scrapy 用户编写的自定义类,用于解析响应并从中提取项目或要遵循的其他请求。有关详细信息,请参阅蜘蛛

项目管道

项目管道负责在蜘蛛提取(或抓取)项目后对其进行处理。典型的任务包括清理、验证和持久化(例如将项目存储在数据库中)。有关详细信息,请参阅项目管道

下载器中间件

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

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

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

  • 在将收到的响应传递给蜘蛛之前更改它;

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

  • 将响应传递给蜘蛛而不获取网页;

  • 默默地放弃一些请求。

有关详细信息,请参阅下载器中间件

蜘蛛中间件

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

如果需要,请使用 Spider 中间件

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

  • 后处理start_requests;

  • 处理蜘蛛异常;

  • 根据响应内容对某些请求调用 errback 而不是回调。

有关详细信息,请参阅Spider 中间件

事件驱动的网络

Scrapy 是用Twisted编写的,Twisted 是一种流行的 Python 事件驱动网络框架。因此,它是使用非阻塞(又称异步)代码来实现并发性的。

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


打赏
关键词: Scrapy 架构概述

0 评论

发表评论