文章目录[隐藏]
最近有了解Scrapy相关知识,以前初次接触感觉麻烦就转向了request,看来一圈都有点懵逼,后来找到了架构图就基本理解了整个运作逻辑。
组件
组件 | 说明 |
---|---|
Engine引擎(大总管) | 用来处理整个系统的数据流处理,触发事务,是整个框架的核心。 |
Item 项目 | 它定义了爬取结果的数据结构,爬取的数据会被赋值成该对象。 |
Scheduler 调度器 | 用来接受引擎发过来的请求并加入队列中,并在引擎再次请求的时候提供给引擎,可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 |
Downloader 下载器 | 用于下载网页内容,并将网页内容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的 |
Spiders 蜘蛛 | 是开发人员自定义的类,里面有爬取的逻辑和网页的解析规则,它主要负责解析响应并生成提取结果和新的请求。 |
Item Pipeline 项目管道 | 在items被提取后负责处理它们,它的主要任务是清洗、验证和存储数据。 |
Downloader Middlewares 下载器中间件 | 位于引擎和下载器之间的钩子框架,主要是处理引擎与下载器之间的请求及响应。(用的最多,加头,加代理,加cookie,集成selenium) |
Spider Middlewares 蜘蛛中间件 | 位于引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛输入的响应和输出的结果及新的请求。 |
中间件 | 两个桥梁
Spider Middleware | Engine和Spider之间
- 目的:对请求和爬取的项目将那些在处理
- 功能:修改、丢弃、新增请求或爬取项
Downloader Middletown | Engine和下载器之间的钩子框架
- 目的: 实施Engine、Scheduler和Downloader之间进行用户可配置的控制
- 功能: 修改、丢弃、新增请求或响应。
数据流
数据流由引擎控制
- Engine 首先打开一个网站,找到处理该网站的 Spider 并向该 Spider 请求第一个要爬取的 URL。
- Engine 从 Spider 中获取到第一个要爬取的 URL 并通过 Scheduler 以 Request 的形式调度。
- Engine 向 Scheduler 请求下一个要爬取的 URL。
- Scheduler 返回下一个要爬取的 URL 给 Engine,Engine 将 URL 通过 Downloader Middlewares 转发给 Downloader 下载。
- 一旦页面下载完毕, Downloader 生成一个该页面的 Response,并将其通过 Downloader Middlewares 发送给 Engine。
- Engine 从下载器中接收到 Response 并通过 Spider Middlewares 发送给 Spider 处理。
- Spider 处理 Response 并返回爬取到的 Item 及新的 Request 给 Engine。
- Engine 将 Spider 返回的 Item 给 Item Pipeline,将新的 Request 给 Scheduler。
- 重复第二步到最后一步,直到 Scheduler 中没有更多的 Request,Engine 关闭该网站,爬取结束。
通过多个组件的相互协作、不同组件完成工作的不同、组件对异步处理的支持,Scrapy 最大限度地利用了网络带宽,大大提高了数据爬取和处理的效率。
参考
- https://www.cnblogs.com/miaoning/p/11626563.html | 图好,有函数说明
- https://www.cnblogs.com/baohanblog/p/12675490.html | 架构组件说清楚了