Scrapy爬虫框架:介绍
诞生背景
在采取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 使用广泛,文档、教程、社区案例都比较多。
这意味着遇到问题时,更容易查到解决方案,也更适合团队协作和长期项目。
更多推荐
所有评论(0)