全部源码解析文章索引目录传送门
【Scrapy 框架】版本 2.4.0 源码篇:全部配置目录索引
内容介绍
本文档介绍了Scrapy的体系结构及其组件之间的交互方式。
业务处理流程
- 该引擎获取从最初请求爬行spider。
- 该引擎安排在请求调度程序和要求下一个请求爬行。
- 该计划返回下一请求的引擎。
- 该引擎发送请求到下载器,通过下载器中间件。
- 页面下载完成后, Downloader会生成一个带有该页面的响应,并将其发送到Engine,并通过 Downloader Middlewares。
- 该引擎接收来自响应 下载器并将其发送到所述 spider进行处理,通过spider中间件。
- 该spider处理响应并返回刮下的项目和新的要求(跟随)的 引擎,通过spider中间件。
- 该引擎发送处理的项目,以项目管道,然后把处理的请求的调度,并要求新的请求爬行。
- 重复该过程(从步骤1开始),直到不再有Scheduler的请求为止 。
各个组件部分
- Scrapy引擎
引擎负责控制系统所有组件之间的数据流,并在发生某些操作时触发事件。 - Scheduler
调度程序从引擎接收请求,并在引擎请求它们时将它们排队,以便以后将它们(也发送到引擎)提供给它们。 - Downloader
下载器负责获取网页并将其馈送到引擎,引擎又将其馈给spider。 - Spiders
spider是由Scrapy用户写入解析响应和提取自定义类的Item。 - Item Pipeline
一旦spider将它们提取(或Scrapy),项目管道负责处理项目。典型的任务包括清理,验证和持久性(例如将项目存储在数据库中)。
如果需要执行以下操作之一,请使用Downloader中间件:
- 在将请求发送到下载器之前处理请求(即,在Scrapy将请求发送到网站之前);
- 在传递给spider之前更改收到的响应;
- 发送新的请求,而不是将收到的响应传递给spider;
- 将响应传递给spider,而无需获取网页;
- 默默地丢弃一些请求。
- Spider middlewares
蛛中间件是位于引擎和spider之间的特定挂钩,并且能够处理spider的输入(响应)和输出(项目和请求)。
如果需要执行以下操作之一,请使用Spider中间件
- spider回调的后处理输出-更改/添加/删除请求或项目;
- 后处理start_requests;
- 处理spider异常;
- 根据响应内容,对某些请求调用errback而不是回调。
- Event-driven networking
Scrapy用Twisted编写,Twisted是一种流行的事件驱动的Python网络框架。因此,使用异步代码并发实现的。