美文网首页
基于scrapy-redis的知乎分布式爬虫1.0版本

基于scrapy-redis的知乎分布式爬虫1.0版本

作者: 蜗牛仔 | 来源:发表于2017-04-18 00:46 被阅读1905次

    这是第一次写分布式爬虫,所以写得比较简单,这次主要是利用上次知乎爬虫的代码,然后部署在两台机器上,一台是本地的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

    Paste_Image.png

    如果没有启动这个pipline,则redis只会保存请求指纹,请求信息等数据,爬取的item是不会保存的,这样也可以节省网络流量。

    对于保存数据的pipline也要做相应的修改,如图

    Paste_Image.png

    把数据统一保存在腾讯云主机上,然后我们直接在主机,以及腾讯云服务器上运行代码就好了。
    总结:scrapy-redis为我们使用分布式爬虫提供了一个很好的调度器,把我们需要爬取的URL全部放进一个队列,且实现去重,我们只要启动不同主机的代码,然后共同链接到某一台主机(宿主机)的redis数据库就可以了,爬虫会自动到队列领取URL进行爬取,然后也会把新的URL放进去。
    最后上张结果图

    Paste_Image.png

    也就不足几分钟的功夫,已经成功爬取了5000+用户的信息

    相关文章

      网友评论

          本文标题:基于scrapy-redis的知乎分布式爬虫1.0版本

          本文链接:https://www.haomeiwen.com/subject/zowxzttx.html