2.1. Scrapy 源码剖析 架构概览

2.1.1. 简介

官方给出的介绍如下:

Scrapy 是一个基于 Python 语言编写的开源爬虫框架,它可以帮你快速、简单的方式构建爬虫,并从网站上提取你所需要的数据。

2.1.2. 快速入门

可以参考 官方入门教程

2.1.3. 架构

https://docs.scrapy.org/en/latest/_images/scrapy_architecture_02.png

2.1.4. 核心模块

  • engine: 核心引擎,负责控制和调度各个组件,保证数据流的正确流转。

  • scheduler: 调度器,负责接受引擎发过来的请求,存储要调度的任务,并按照一定的策略进行调度,管理任务,过滤任务,都在这里控制。

  • downloader: 下载器,负责从各个站点下载网页,输出下载结果。

  • spiders: 爬虫,我们自定义编写的代码,负责根据我们的需求,解析出来特定的item对象。

  • item pipelines: 管道,负责将spiders解析出来的item对象,进行持久化存储。

  • download middlewares: 下载中间件,介于引擎和下载器中间,在网页下载前和后完成一些逻辑处理。

  • spiders middlewares: 爬虫中间件,介于引擎和爬虫中间,在爬虫解析前和后完成一些逻辑处理。

2.1.5. 运行步骤

  1. 引擎从Spider获取初始URL(种子URL).

  2. 引擎在Scheduler中调度请求,并请求下一个要抓取的请求。

  3. scheduler将下一个请求返回给引擎。

  4. 引擎通过下载中间件将请求发送到下载器。

  5. 一旦下载完成,下载器会生成一个相应,并将其发送给引擎。

  6. 引擎接收到下载器的响应,通过spider 中间件将其发送到spider处理。

  7. spider处理相应,并返回一个item对象或者request对象。

  8. 引擎将处理的item对象发送给item pipeline。请求对象发送给scheduler。

  9. 重复2-8步,直到scheduler中没有请求为止。

2.1.6. 详细架构图如下