诞生背景

在采取requests或aiohttp来爬取数据时,我们会发现其中爬取逻辑、异常处理、数据解析、数据存储等很多步骤都是可通用且重复的,既如此,我们完全可以把这些步骤的逻辑抽离出来。把每个通用功能做成一个个基础组件,这可以大大减少开发成。Scrapy 的出现,就是为了把这些通用能力进行标准化和模块化,让开发者能够更高效地构建稳定、可扩展的爬虫系统。

框架构成

图片源于官方文档:https://docs.scrapy.org/en/latest/topics/architecture.html

各组件功能

1. Spiders(爬虫)

负责定义“抓什么”和“怎么解析”网页内容。
它会生成请求,并从响应中提取所需数据或继续生成新的请求。

2. Scheduler(调度器)

负责管理待抓取请求队列。
它决定请求的优先级、顺序,以及是否需要去重。

3. Downloader(下载器)

负责真正发送 HTTP 请求到目标网站,并获取网页响应。
它相当于 Scrapy 和互联网之间的“执行者”。

4. Downloader Middleware(下载中间件)

位于请求和响应的中间层。
可以在请求发出前或响应返回后进行拦截、修改、代理、重试、限速等处理。

5. Spider Middleware(爬虫中间件)

位于 Spider 和 Engine 之间。
用于对 Spider 输入输出进行加工,例如过滤、包装、调整返回结果。

6. Engine(引擎)

Scrapy 的核心调度中枢。
负责协调 Spider、Scheduler、Downloader 和 Pipelines 之间的数据流转。

7. Item Pipeline(项目管道)

负责对 Spider 抽取出来的数据进行清洗、验证、去重、存储等处理。
常见用途包括保存到数据库、写入文件、数据清洗等。

完整运作流程

Scrapy 的工作方式可以理解为一条自动化的数据采集流水线。它不是由某一个组件单独完成所有工作,而是由多个模块协同配合,按顺序完成“发起请求、下载网页、解析数据、处理结果”的全过程。

1. Spider 发起抓取请求

Scrapy 的起点是 Spider
Spider 负责告诉框架:要抓取哪些网页、从哪些入口开始。它会生成初始请求,并定义后续如何解析网页内容。

2. 请求进入 Scheduler 排队

Spider 生成的请求不会立刻全部发送出去,而是先由Engine交给 Scheduler
Scheduler 负责把请求放进队列中,进行排序、去重和调度,决定哪些请求先执行。

3. Engine 统筹调度

Engine 是 Scrapy 的核心中枢。
它会不断从 Scheduler 中取出待处理请求,并把这些请求交给下载器去执行,同时协调 Spider、Downloader、Pipeline 等组件的工作节奏。

4. Downloader 发送请求并获取响应

Downloader 负责真正向目标网站发起 HTTP 请求。
如果网页正常返回,Downloader 就会拿到响应内容,比如 HTML、JSON、图片等。

5. Middleware 对请求和响应进行加工

在请求发送之前、响应返回之后,数据都会经过 Middleware
中间件可以对请求做修改,比如加请求头、换代理、重试失败请求;也可以对响应做预处理,比如过滤、解压、异常处理等。

6. Response 返回给 Spider 解析

Downloader 拿到响应后,Engine 会把它再交回给 Spider
Spider 根据之前定义的解析逻辑,从响应中提取出所需数据,或者继续生成新的请求,形成循环抓取。

7. Spider 产出 Items 或新的 Requests

Spider 解析页面后,通常会产生两类结果:

  • Items:结构化数据,比如商品名、价格、标题、时间等
  • Requests:新的抓取请求,用于继续爬取下一页或详情页

8. Items 进入 Item Pipeline

Spider 提取出的数据不会直接结束,而是进入 Item Pipeline
在这里,数据会被进一步清洗、校验、去重、格式化,并最终保存到数据库、文件或其他存储系统中。

9. 循环执行,直到任务结束

Scrapy 会不断重复以上过程:
请求排队 → 下载网页 → 解析内容 → 处理数据 → 生成新请求,直到没有新的请求可抓取为止,整个爬虫任务才结束。

选择Scrapy的优势

1. 框架完整,开箱即用

Scrapy 不是只提供“发请求”的工具,而是一套完整的爬虫框架。
它自带请求调度、并发下载、数据解析、去重、管道处理、中间件扩展等能力,开发者不用自己从零搭建一整套爬虫系统。

2. 开发效率高

如果用原生代码写爬虫,很多通用功能都要自己实现,比如:

  • 请求排队
  • 重试机制
  • 失败处理
  • 数据清洗
  • 结果保存

Scrapy 已经把这些常用能力封装好了,能大幅减少重复开发工作。

3. 并发能力强

Scrapy 基于异步机制,适合批量抓取大量网页。
相比一个个同步请求,它能更高效地利用网络等待时间,提升整体采集速度。

4. 模块化程度高,易维护

Scrapy 把爬虫拆成多个清晰的组件:

  • Spider 负责解析逻辑
  • Scheduler 负责调度
  • Downloader 负责下载
  • Middleware 负责加工请求/响应
  • Pipeline 负责处理数据

这种结构让代码职责清晰,后期维护和扩展都很方便。

5. 扩展性好

Scrapy 支持中间件、管道、自定义扩展等机制。
如果你想加代理、登录、验证码处理、数据存储、异常重试等功能,都可以比较方便地扩展。

6. 社区成熟,资料丰富

Scrapy 使用广泛,文档、教程、社区案例都比较多。
这意味着遇到问题时,更容易查到解决方案,也更适合团队协作和长期项目。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐