python之scrapy(五)分布式爬虫

本文介绍了Python Scrapy框架的分布式爬虫实现原理和步骤,包括使用Redis作为爬取队列、去重机制和避免中断的方法。推荐了一个基于Redis的Scrapy分布式组件scrapy-redis,并提供了相关配置选项。
摘要由CSDN通过智能技术生成

Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时候,单个主机的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来。

一、分布式爬虫的原理

下面是单机版本的Scrapy框架:

Scrapy单机爬虫中只有一个本地爬取队列Queue,如果新的Request生成,就放到队列里面,随后Request被Scheduler调度。之后Request交给DownLoader执行爬取,简单的调度框架如下图所示:

 

如果两个Scheduler同时从消息队里里面取Request,每个Scheduler都有对应的DownLoader,那么在带宽足够、正常爬取切不考虑队列压力的情况下,爬虫效率就会翻倍。

这样,Sheduler可以扩展为多个,DownLoader也是多个,而爬取队列维持为一个,也就是所谓的共享爬虫队列。这样才能保证Scheduler从队列里面调度某个Request之后,其他的Scheduler不会重复调用该Request,就可以保证多个Scheduler同步爬取。

Scheduler进行调度,而要实现多台服务器共同爬取数据关键就是共享爬取队列。

我们需要做的是在多台主机上同时运行爬虫任务协同爬取,而协同爬取的的前提就是共享爬虫队列。这样各台主机不需要各自维护排重队列,各台主机还是有各自的Sheduler和Downloader,所以调度和下载功能在各自的主机上完成。

 

二、维护爬虫队列

这里一般我们通过Redis为维护,Redis,非关系型数据库,Key-Value形式存储,结构灵活;并且redis是内存中的数据结构存储系统,处理速度快;提供队列集合等多种存储结构,方便队列维护。

  • 列表有lpush()、rpush()、lpop()、rpop()方法,可以实现先进先出式爬取队列,也可以实现先进后出堆栈式爬取队列;

  • 集合的元素是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值