架构概述

本文档描述了Scrapy的架构及其组件的相互作用。

概述

下图显示了Scrapy架构及其组件的概述,以及系统内部发生的数据流的轮廓(由红色箭头显示)。 有关组件的简要说明,请参见以下有关它们的更多详细信息的链接。 数据流也在下面描述。

数据流

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

引擎获取初始请求从蜘蛛爬网。

引擎在计划程序中调度请求,并请求下一个要爬网的请求。

计划程序将下一个请求返回给引擎。

引擎将请求发送到Downloader,通过Downloader Middlewares(请参阅process_request())。

页面完成下载后,下载器将生成响应(使用该页面),并将其发送到引擎,通过下载器中间件(请参阅process_response())。

引擎从下载器接收响应并将其发送到Spider进行处理,通过Spider中间件(参见process_spider_input())。

Spider处理响应并返回已发现的项目和新的请求(跟随)到引擎,通过Spider中间件(请参阅process_spider_output())。

引擎将处理的项目发送到项目管道,然后将已处理的请求发送到计划程序,并询问可能的下一个爬网请求。

该过程重复(从步骤1),直到没有来自调度程序的更多请求。

组件

Scrapy Engine
Scheduler

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

调度

调度程序从引擎接收请求,并在引擎请求时将它们排入队列(以及引擎)。

下载

下载器负责抓取网页并将其馈送给引擎,引擎反过来将其提供给蜘蛛。

蜘蛛

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

物品管道

物品管道由蜘蛛提取(或刮除)后负责处理。典型的任务包括清理,验证和持久性(如将数据存储在数据库中)。有关详细信息,请参阅物料管道。

下载中间件

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

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

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

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

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

在不抓取网页的情况下将响应传递给蜘蛛;

默默地丢下一些请求。

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

蜘蛛中间件

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

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

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

后处理start_requests;

处理蜘蛛异常;

根据响应内容调用errback而不是一些请求的回调。

有关更多信息,请参阅Spider Middleware。

事件驱动的网络

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

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

扭转延期介绍

Twisted - 你好,异步编程

扭转介绍 - Krondo

results matching ""

    No results matching ""