Architecture overview

本文档介绍了Scrapy的体系结构及其组件之间的交互方式.

Overview

下图显示了Scrapy体系结构及其组件的概述,以及系统内部发生的数据流的概况(由红色箭头显示). 下面包括对这些组件的简要说明,以及有关它们的更多详细信息的链接. 数据流也在下面描述.

Data flow

Scrapy architecture

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

  1. 引擎蜘蛛那里得到最初的爬行要求.
  2. 引擎安排在请求调度程序和要求下一个请求爬行.
  3. 调度程序将下一个请求返回给引擎 .
  4. 引擎发送请求到下载器 ,通过使下载中间件 (见process_request()
  5. 页面下载完成后, Downloader会在该页面上生成一个Response(响应),并将其发送到Engine,并通过Downloader Middlewares (请参阅process_response() ).
  6. 引擎下载器接收响应,并将其发送到Spider进行处理,并通过Spider中间件传递(请参阅process_spider_input() ).
  7. The Spider processes the Response and returns scraped items and new Requests (to follow) to the Engine, passing through the Spider Middleware (see process_spider_output()).
  8. 引擎将已处理的项目发送到" 项目管道" ,然后将已处理的请求发送到调度程序,并请求爬网的下一个请求.
  9. 重复该过程(从步骤1开始),直到不再有Scheduler的请求为止.

Components

Scrapy Engine

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

Scheduler

调度程序从引擎接收请求,并在引擎请求它们时使它们排队,以便以后将它们(也发送给引擎)提供给它们.

Downloader

下载器负责获取网页并将其馈送到引擎,引擎又将其馈给蜘蛛.

Spiders

蜘蛛是Scrapy用户编写的自定义类,用于解析响应并从中提取项目(也称为抓取的项目)或要遵循的其他请求. 有关更多信息,请参见蜘蛛 .

Item Pipeline

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

Downloader middlewares

Downloader中间件是位于引擎和Downloader之间的特定挂钩,它们在从引擎传递到Downloader时处理请求,以及从Downloader传递到Engine的响应.

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

  • 在将请求发送到下载程序之前处理请求(即,在Scrapy将请求发送到网站之前);
  • 在将接收到的响应传递给蜘蛛之前,先对其进行更改;
  • 发送新的请求,而不是将接收到的响应传递给蜘蛛;
  • 将响应传递给蜘蛛,而无需获取网页;
  • 默默地丢弃一些请求.

有关更多信息,请参见Downloader Middleware .

Spider middlewares

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

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

  • 蜘蛛回调的后处理输出-更改/添加/删除请求或项目;
  • 后处理start_requests;
  • 处理蜘蛛异常;
  • 根据响应内容,对某些请求调用errback而不是回调.

有关更多信息,请参见Spider中间件 .

Event-driven networking

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

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