Scrapy学习笔记-体系结构

下图概述了Scrapy体系结构及其组件,并概述了系统内部发生的数据流(由红色箭头显示)。 下面包括对这些组件的简要说明,以及有关它们的更多详细信息的链接。
Scrapy学习笔记-体系结构
Scrapy中的数据流由执行引擎控制,也就是图中菱形的框,如下所示:

  1. 引擎会从爬虫组件获取初始请求以进行爬网。
  2. 引擎在调度程序中调度请求,并请求下一个要爬网的请求。
  3. 调度程序将下一个请求返回给引擎。
  4. 引擎通过下载器中间件将请求发送到下载器(请参阅process_request)。
  5. 页面下载完成后,Downloader会生成一个(带有该页面的)响应,并通过Downloader中间件将其发送到引擎(请参阅process_response)。
  6. 引擎从下载器接收响应,并将其发送到Spider进行处理,并通过Spider中间件传递(请参阅process_spider_input)。
  7. Spider处理响应,并通过Spider中间件将抓取的项目和新的请求返回给引擎(请参阅process_spider_output)。
  8. 引擎将处理后的项目发送到项目管道,然后将处理后的请求发送到调度程序,并请求爬网的下一个请求。
  9. 重复该过程(从步骤1开始),直到不再有来自调度程序的请求为止。

Scrapy Engine:引擎负责控制系统所有组件之间的数据流,并在发生某些操作时触发事件。 有关更多详细信息,请参见上面的“数据流”部分。
Scheduler:调度程序从引擎接收请求,并在引擎请求它们时将它们排入队列,以便以后(同样也向引擎)提供它们。
Downloader:下载器负责获取网页并将其馈送到引擎,引擎又将其馈给爬虫。
Spiders:蜘蛛是Scrapy用户编写的自定义类,用于解析响应并从中提取项目(也称为抓取的项目)或其他后续请求。
Item Pipeline:一旦蜘蛛将它们提取(或刮除),项目管道负责处理项目。 典型的任务包括清理,验证和持久化(例如将项目存储在数据库中)。
Downloader middlewares:下载器中间件是位于引擎和下载器之间的特定挂钩,它们在从引擎传递到下载器时处理请求,以及从下载器传递到引擎的响应。如果需要执行以下操作之一,请使用Downloader中间件:在将请求发送到下载程序之前处理请求(即,在Scrapy将请求发送到网站之前);在将接收到的响应传递给蜘蛛之前,先对其进行更改;发送新的请求,而不是将接收到的响应传递给蜘蛛;将响应传递给蜘蛛,而无需获取网页;默默地丢弃一些请求。
Spider middlewares:蜘蛛中间件是位于引擎和蜘蛛之间的特定挂钩,并且能够处理蜘蛛的输入(响应)和输出(项目和请求)。
如果需要,请使用Spider中间件:蜘蛛回调的后处理输出-更改/添加/删除请求或项目;后处理start_requests;处理蜘蛛异常;根据响应内容,对某些请求调用errback而不是回调。
Event-driven networking:Scrapy用Twisted编写,Twisted是一种流行的Python事件驱动的网络框架。 因此,它是使用非阻塞(又称为异步)代码并发实现的。