赞
踩
Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时候,单个主机的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来。
一、分布式爬虫的原理
下面是单机版本的Scrapy框架:
Scrapy单机爬虫中只有一个本地爬取队列Queue,如果新的Request生成,就放到队列里面,随后Request被Scheduler调度。之后Request交给DownLoader执行爬取,简单的调度框架如下图所示:
如果两个Scheduler同时从消息队里里面取Request,每个Scheduler都有对应的DownLoader,那么在带宽足够、正常爬取切不考虑队列压力的情况下,爬虫效率就会翻倍。
这样,Sheduler可以扩展为多个,DownLoader也是多个,而爬取队列维持为一个,也就是所谓的共享爬虫队列。这样才能保证Scheduler从队列里面调度某个Request之后,其他的Scheduler不会重复调用该Request,就可以保证多个Scheduler同步爬取。
Scheduler进行调度,而要实现多台服务器共同爬取数据关键就是共享爬取队列。
我们需要做的是在多台主机上同时运行爬虫任务协同爬取,而协同爬取的的前提就是共享爬虫队列。这样各台主机不需要各自维护排重队列,各台主机还是有各自的Sheduler和Downloader,所以调度和下载功能在各自的主机上完成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。