当前位置: 首页 > 后端技术 > Python

Scrapy学习笔记-架构

时间:2023-03-26 13:43:22 Python

下图提供了Scrapy架构及其组件的概述,以及系统内部发生的数据流(由红色箭头所示)的概述。下面包含这些组件的简要说明,以及指向有关它们的更多详细信息的链接。Scrapy中的数据流是由执行引擎控制的,也就是图中的菱形框,如下图:引擎会获取爬虫组件的初始请求进行爬取。引擎在调度器中调度请求,请求下一个要爬取的。调度程序将下一个请求返回给引擎。引擎通过下载器中间件向下载器发送请求(参见process_request)。页面下载完成后,下载器生成一个响应(带有页面)并通过下载器中间件将其发送到引擎(请参阅process_response)。引擎接收到下载器的响应并将其发送给蜘蛛进行处理,通过蜘蛛中间件传递(参见process_spider_input)。蜘蛛处理响应并通过蜘蛛中间件(参见process_spider_output)将爬取的项目和新请求返回给引擎。引擎将处理后的项目发送到项目管道,然后将处理后的请求发送到调度程序并请求下一个抓取请求。重复该过程(从步骤1开始),直到不再有来自调度程序的请求。Scrapy引擎:该引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。有关更多详细信息,请参阅上面的“数据流”部分。调度程序:调度程序接收来自引擎的请求,并在引擎请求它们时将它们排入队列,以便稍后(再次向引擎)提供服务。下载器:下载器负责获取网页并将其提供给引擎,引擎又将其提供给爬虫。蜘蛛:蜘蛛是Scrapy用户编写的自定义类,用于解析响应并从中提取项目(也称为已抓取的项目)或其他后续请求。ItemPipeline:ItemPipeline负责在蜘蛛获取(或抓取)项目后对其进行处理。典型任务包括清理、验证和持久化(例如将项目存储在数据库中)。下载器中间件:下载器中间件是位于引擎和下载器之间的特定挂钩,它们处理从引擎传递到下载器的请求,以及从下载器到引擎的响应。如果您需要执行以下操作之一,请使用Downloader中间件:在将请求发送到下载器之前处理请求(即在Scrapy将请求发送到网站之前);它做出改变;发送新请求而不是将收到的响应传递给蜘蛛;将响应传递给蜘蛛而不获取页面;默默地放弃一些请求。蜘蛛中间件:蜘蛛中间件是位于引擎和蜘蛛之间的特定钩子,能够处理蜘蛛的输入(响应)和输出(项目和请求)。如果需要,请使用Spider中间件:蜘蛛回调的后处理输出-更改/添加/删除请求或项目;后处理start_requests;处理蜘蛛异常;根据响应内容,为某些请求调用errback而不是回调。事件驱动网络:Scrapy是用Twisted编写的,Twisted是一种流行的Python事件驱动网络框架。因此,它是使用非阻塞(也称为异步)代码并发实现的。