美文网首页
scrapy_redis分布式爬虫

scrapy_redis分布式爬虫

作者: ddm2014 | 来源:发表于2018-08-31 08:34 被阅读0次

    说到redis了,自然就要说到另一个爬虫框架scrapy_redis,分布式爬虫,
    scrapy与scrapy_redis最大的不同是scheduler,也正是因为这个scheduler才使得scrapy_redis能够做到分布式。
    最大的改动在于将带爬url放进redis,master主要就是维护此队列,slave就能根据优先级队列进行分别式爬取,同时redis有set,dupefiler模块通过哈希指纹去重,保证分布式进行。
    item返回是先返回到master的redis然后存入其他数据库。

    对scrapy的改造:
    改造
    setting:

    1.(必须加)。使用scrapy_redis.duperfilter.REPDupeFilter的去重组件,在redis数据库里做去重。

    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

    2.(必须加)。使用了scrapy_redis的调度器,在redis里面分配请求。

    SCHEDULER = "scrapy_redis.scheduler.Scheduler"

    3.(必须加)。在redis queues 允许暂停和暂停后恢复,也就是不清理redis queues

    SCHEDULER_PERSIST = True

    4.(必须加)。通过RedisPipeline将item写入key为 spider.name: items的redis的list中,供后面的分布式处理item。

    这个已经由scrapy-redis实现了,不需要我们自己手动写代码,直接使用即可。

    ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 100
    }
    REDIS_HOST = "127.0.0.1"
    REDIS_PORT = 6379

    spider:

    from scrapy_redis.spiders import RedisSpider
    import scrapy
    
    class ToutiaoSpider(RedisSpider):
        name='toutiao'
        redis_key = 'start_url'    #需将start_url先存入redis
        def parse(self, response):
            ....
            scrapy.Request(url, callback=xxx)
    

    scrapy与scrapy_redis的区别
    scrapy_redis总结

    相关文章

      网友评论

          本文标题:scrapy_redis分布式爬虫

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