接外包,有相关需求的可以联系我:Telegram | Email

Scrapy 架构

该文章创建(更新)于10/28/2022,请注意文章的时效性!

最近有了解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 | 架构组件说清楚了

要不赞赏一下?

微信
支付宝
PayPal
Bitcoin

版权声明 | Copyright

除非特别说明,本博客所有作品均采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。转载请注明转自-
https://www.emperinter.info/2022/10/28/scrapy-architecture/


要不聊聊?

我相信你准备留下的内容是经过思考的!【勾选防爬虫,未勾选无法留言】

*

*



YouTube | B站

微信公众号

👉 NewsLetter ❤️ 邮箱订阅 👈

优惠码

阿里云国际版20美元
Vultr10美元
搬瓦工 | Bandwagon应该有折扣吧?
Just My SocksJMS9272283 【注意手动复制去跳转】
域名 | namesiloemperinter(1美元)
币安 币安