在学习了scrapy基础后,我们在来了解一下scrapy的架构概览,这有助于我们更好的了解、学习scrapy。下面介绍Scrapy的体系结构及其组件之间的交互方式。

1.总览

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

ssl

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

  1. engine(引擎)从spiders(爬虫)获取初始请求
  2. engine(引擎)在scheduler(调度器)调度请求,并请求下一个要爬取的请求
  3. scheduler(调度器)返回engine(引擎)下一个要爬取的请求
  4. engine(引擎)通过middleware(中间件)将请求发送到downloader(下载器)
  5. 页面下载完成后downloader(下载器)会生成一个(带有该页面的)响应,并通过downloader middlewares(下载中间件)发送给engine(引擎)
  6. engine(引擎)从downloader(下载器)接收响应,通过spider middlewares(爬虫中间件)将其发送到spider(爬虫)进行处理
  7. spider(爬虫)处理响应后,再通过spider middlewares(爬虫中间件)返回抓取到items和新的请求到engine(引擎)
  8. engine(引擎)将处理好的items发送到Item pipelines(item 管道),然后发送已处理的请求到scheduler(调度器),并询问下个可能的请求
  9. 重复该过程(从步骤1开始),直到scheduler(调度器)没有的请求。

2.组件

Scrapy Engine(引擎)

引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。

Scheduler(调度器)

调度器从引擎接受请求并将其排队,以便之后引擎请求它们时提供给引擎。

Downloader(下载器)

下载器负责获取页面,并提供给引擎,引擎再将其提供给爬虫。

Spiders(爬虫)

Spider是Scrapy用户编写的用于解析请求并提取item或额外跟进的请求的类。

Item Pipeline

Item Pipeline负责处理爬虫提取出来的item。典型的任务有清理、 验证及持久化(例如存取到数据库中)。

Downloader middlewares(下载中间件)

下载器中间件是在引擎及下载器之间的特定钩子(specific hook),当请求从引擎到下载器时处理请求,响应从下载器到引擎时处理响应。

如果要做以下的工作,就可以使用下载器中间件:

Spider middlewares(爬虫中间件)

爬虫中间件是在引擎及爬虫之间的特定钩子(specific hook),处理爬虫的输入(响应)和输出(items和请求)。

爬虫中间件的可以用来:

Event-driven networking(事件驱动网络)

Scrapy是基于事件驱动网络框架 Twisted 编写的。因此,Scrapy基于并发考虑由非阻塞(异步)代码实现。

Scrapy 1.7

Scrapy 安装并创建运行爬虫项目(1) Scrapy 命令行工具(2) Scrapy 选择器(3) Scrapy Item(4) Scrapy Item Loaders(5) Scrapy Item Pipeline(6) Scrapy Feed exports(7) Scrapy 架构概览(8) Scrapy 手写一个爬虫(9) Scrapy 知乎模拟登陆 (10) Scrapy源码分析 架构概览(1) Scrapy源码分析 运行入口(2) Scrapy源码分析 核心组件初始化(3) Scrapy源码分析 核心抓取流程(4)