这是第一次写分布式爬虫,所以写得比较简单,这次主要是利用上次知乎爬虫的代码,然后部署在两台机器上,一台是本地的win7系统,一台是腾讯云的乌班图系统,在乌班图系统上的代码直接从github上拷过去就好了。这个爬虫的部署比较简单,两台机器同时抓取,然后数据全部保存到乌班图系统的mongodb数据库,首先我们在seetings文件里面增加这几句
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
REDIS_URL = 'redis://root:myredis@124.107.126.72:6379'
第一句是启动scrapy_redis的调度器,不适用默认的,
第二句是启用去重功能,scrapy爬虫里面利用yield生成器返回待访问的URL,将他们放进队列,爬虫会进去队列领取URL进行爬取,启用该功能后,每个放进去的URL都会先经过去重,里面爬取过的URL也会在redis数据库里面贴上唯一的指纹,防止下次爬取一样的URL,也就是为了以后进来新的URL进行去重。
第三句是链接乌班图系统里面的redis数据,之前的链接指纹,返回的item数据都会自动储存在该数据库,当然必须启动如图这个pipline
如果没有启动这个pipline,则redis只会保存请求指纹,请求信息等数据,爬取的item是不会保存的,这样也可以节省网络流量。
对于保存数据的pipline也要做相应的修改,如图
把数据统一保存在腾讯云主机上,然后我们直接在主机,以及腾讯云服务器上运行代码就好了。
总结:scrapy-redis为我们使用分布式爬虫提供了一个很好的调度器,把我们需要爬取的URL全部放进一个队列,且实现去重,我们只要启动不同主机的代码,然后共同链接到某一台主机(宿主机)的redis数据库就可以了,爬虫会自动到队列领取URL进行爬取,然后也会把新的URL放进去。
最后上张结果图
也就不足几分钟的功夫,已经成功爬取了5000+用户的信息