本文档介绍了 Scrapy 架构及其组件之间的交互。
接下来的图表展现了 Scrapy 的架构,包括组件及在系统中发生的数据流的概览(绿色箭头所示)。下面对每个组件都做了简单介绍,并给出了详细内容的链接。数据流如下所描述。
引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。 详细内容查看下面的数据流(Data Flow)部分。
调度器从引擎接受 request 并将他们入队,以便之后引擎请求他们时提供给引擎。
下载器负责获取页面数据并提供给引擎,而后提供给 spider。
Spider 是 Scrapy 用户编写用于分析 response 并提取 item(即获取到的 item)或额外跟进的 URL 的类。 每个 spider 负责处理一个特定(或一些)网站。更多内容请看 Spiders。
Item Pipeline 负责处理被 spider 提取出来的 item。典型的处理有清理、验证及持久化(例如存取到数据库中)。更多内容查看 Item Pipeline。
下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理 Downloader 传递给引擎的 response。 其提供了一个简便的机制,通过插入自定义代码来扩展 Scrapy 功能。更多内容请看下载器中间件(Downloader Middleware)。
Spider 中间件是在引擎及 Spider 之间的特定钩子(specific hook),处理 spider 的输入(response)和输出(items 及 requests)。其提供了一个简便的机制,通过插入自定义代码来扩展 Scrapy 功能。更多内容请看 Spider 中间件(Middleware)。
Scrapy 中的数据流由执行引擎控制,其过程如下:
Scrapy 基于事件驱动网络框架 Twisted 编写。因此,Scrapy 基于并发性考虑由非阻塞(即异步)的实现。
关于异步编程及 Twisted 更多的内容请查看下列链接: