scrapy分布式爬虫原理(scrapy_redis)

分布式原理

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

=

分布式实现原理:

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

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

简单的调度架构如下图:

爬取队列
调度器

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

爬取队列
调度器A
调度器B
调度器C

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

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

=

=

scrapy——redis实现分布式

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

scrapy_redis和scrapy示意图:

scrapy_redis
scrapy_redis
scrapy_redis
redis
scrapy
scrapy
scrapy

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

=

=

scrapy_redis源码

GitHub:https://github.com/rmax/scrapy-redis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独角兽小马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值