利用scrapy_redis实现分布式爬虫
介绍
Scrapy框架不支持分布式,所以需要将一些关键代码进行修改使之支持分布式。scrapy-redis相当于一个插件,用来替换scrapy中的一些模块,使得scrapy支持分布式。github地址: https://github.com/darkrho/scrapy-redis
redis
redis是一个可基于内存,亦可持久化的key-value数据库,特点是速度快。
原理
在scrapy框架中加入scrapy-redis模块,目的在于将scrapy中的schedule模块替换为scrapy-redis模块。在scrapy-redis中,基于redis数据库构建request队列,所有的爬虫都可以从该redis数据库中获取request,并且所有爬虫产生的request都会送入该redis中。基于此原理实现分布式爬虫功能。
改进
在scrapy-redis中有url判重功能,减少重复爬取。但是其实现比较粗糙,所以可以自定义一个url去重功能,例如使用bloom filter算法 。可以基于redis实现bloom filter算法,既实现了快速判重功能,又能节省内存。此外,可以充分利用redis数据库速度快且可持久化的特点,实现item过滤等等。
Reference
【Bloom Filter原理】
http://www.cnblogs.com/heaad/archive/2011/01/02/1924195.html
http://blog.csdn.net/bone_ace/article/details/53107018
【Bloom Filter python实现】
http://blog.csdn.net/bone_ace/article/details/53107018
【scrapy-redis去重优化】
http://blog.csdn.net/bone_ace/article/details/53099042
https://github.com/LiuXingMing/Scrapy_Redis_Bloomfilter
【scrapy-redis种子优化】
http://blog.csdn.net/Bone_ACE/article/details/53306629
【利用redis实现item去重】
https://www.jianshu.com/p/f03479b9222d
https://www.jianshu.com/p/7b6c1754ee73
【yinzm的个人项目:完整的分布式爬虫】