scrapy分布式爬虫原理(scrapy_redis)

在学习完scrapy基本知识后,大多数爬虫应用了scrapy框架的 异步加多线程后,爬取会有显著提升。但还是局限于一台主机运行,爬取的效率始终有限,因此学习 分布式爬虫就是 将多台主机组合起来,共同完成一个爬取任务,可以进一步提升效率。

分布式实现原理:

首先先回顾一个scrapy的架构:

scrapy会将生成的request放在队列中,这个队列是有deque实现的本地爬取队列queue。放入队列后,调度器scheduler才会调度里面的request,将request交给downloader执行。

简单的调度架构如下图:

分布式爬虫的简单架构如图:

从图中可以看出调度器scheduler可以扩展多个,因此download也可以扩展多个,而爬取队列queue始终为一个。这就是共享爬取队列。这就可以做到 一个scheduler从队列中调度某个request时,其他的scheduler不会重复调度这个request,就可以做到多个scheduler同时爬取,这就是分布式爬虫的基本雌性。

理解了这个大概原理就可以进行下一步scrapy_redis和分布式的结合

scrapy_redis是scrapy框架的一个组件,因为scrapy并不具备分布式的实现,因此scrapy_redis重写了一些scrapy框架里的类,让他能够支持分布式爬虫的创建。

scrapy_redis和scrapy示意图:

scrapy_redis的核心就是redis数据库,因为scrapy_redis改写了scrapy中的queue队列, 用redis数据库代替了queue,让本不能共享的queue变成了可以共享的数据库redis
因此,scrapy_redis将每一个request存入redis数据库中,这样就可以多个spider同时访问一个redis,进行分布式爬取。

Original: https://blog.csdn.net/weixin_44457673/article/details/118970528
Author: 独角兽小马
Title: scrapy分布式爬虫原理(scrapy_redis)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/791084/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球