scrapy分布式爬虫使用bloomfilter去重

在上一篇博文中,我们介绍scrapy简单的分布式爬虫是通过scrapy-redis这个模块来实现的。各个服务器上的爬虫访问同一个服务器上的redis,通过redis的set来去重。通过这种方式来去重,有一个问题就是当爬取的网页很多,几百万上千万或者更多的时候,那就非常占用内存了。
如果希望减少内存的占用,对去重的要求又不是那么高,那这样就可以采用bloomfilter来重。那怎么实现呢?

重写scrapy-redis这个模块

scrapy分布式爬虫就是通过这个模块来去重,好在这个模块代码也不多,找到里面去重的方法,修改一下。在修改之前,我们要知道bloomfilter是怎么结合redis使用的?均益在以前的一篇文章中写过,大家可以回去看一下http://junyiseo.com/python/394.html
其实,这个方法网上已经爬虫大神实现了,这是他的github项目的地址 https://github.com/LiuXingMing/Scrapy_Redis_Bloomfilter
均益参考他的方式,写了一个爬取简书的分布式爬虫,也加入MongoDB数据库保存网页,和redis密码访问的方式,让我们使用起来方便一点。需要爬取另一个网站的时候,我们把里面的爬虫改写一下,还有redis和MongoDB的链接改一下就行了。下面是均益的项目地址,大家可以参考一下。

OSC:https://git.oschina.net/qrk12/spider/tree/master/jianshuBloomfilter

发表评论