zoukankan      html  css  js  c++  java
  • 分布式

    分布式:

    安装:
    	pip3 install scrapy-redis
    
    

    settings文件:

    # 1:设置去重组件,使用的是scrapy_redis的去重组件,而不是scrapy自己的去重组件了
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    # 2:设置调度器,使用scrapy——redis重写的调度器,
    # 而不再使用scrapy内部的调度器了
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    # 3:可以实现断点爬取=jondir,(请求的记录不会丢失,会存储在redis数据库中,
    # 不会清楚 redis的队列,下次直接从redis的队列中爬取)
    SCHEDULER_PERSIST = True
    # 4:设置任务队列的模式(三选一):
    # SpiderPriorityQueue数据scrapy-redis默认使用的队列模式(
    # 有自己的优先级)默认第一种
    SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
    # 使用了队列的形式,任务先进先出。
    #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
    # 采用了栈的形式:任务先进后出
    #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"
    #5: 实现这个管道可以将爬虫端获取的item数据,统一保存在redis数据库中
    ITEM_PIPELINES = {
        'scrapy_redis.pipelines.RedisPipeline': 400,
    }
    
    # 6:指定要存储的redis数据库的主机IP
    REDIS_HOST = '127.0.0.1'  # 远端的ip地址
    
    # 指定redis数据库主机的端口
    REDIS_PORT = 6379
    

    redis 数据:

    代码执行之后redis自动生成以下内容:
    "xcfCrawlSpider:requests":存储的是请求的request对象
    "xcfCrawlSpider:items":存储的爬虫端获取的items数据
    "xcfCrawlSpider:dupefilter":存储的指纹(为了实现去重)
    127.0.0.1:6379> type xcfCrawlSpider:requests
    zset
    127.0.0.1:6379> type xcfCrawlSpider:items
    list
    127.0.0.1:6379> type xcfCrawlSpider:dupefilter
    set
    
    

    实现scrpy.spider爬虫的分布式爬虫:

      from scrapy_redis.spiders import RedisSpider
        #继承自:RedisSpider
        class MyCrawler(RedisSpider):
            """Spider that reads urls from redis queue (myspider:start_urls)."""
            name = 'mycrawler_redis'
            allowed_domains = ['dmoz.org']
            #缺少了start_url,多了redis_key:根据redis_key从redis
            #数据库中获取任务
            redis_key = 'mycrawler:start_urls'
    
            def start_requests(self):
                """
                重写这个方法的目的可以根据自己的需求发起请求
                :return:
                """
                for url in self.start_urls:
                    yield scrapy.Request(url, callback=self.parse, dont_filter=True)
            def parse(self, response):
                 pass
        启动爬虫:scrapy crawl 爬虫名称
        现象:爬虫处于等待状态
        需要设置起始任务:
        lpush mycrawler:start_urls 目标url
    

    注意:

    	注意:实现scrpy.spider爬虫的分布式爬虫第一个回调方法必须是parse,否则代码无法运行。第三种情况同样要注意redis的命令	
    
  • 相关阅读:
    【转】Django部署时为什么要用 uWSGI与 Nginx? 以及 WSGI,uwsgi等协议
    django 的 uwsgi+Nginx 部署配置
    【转】详解Django DRF框架中APIView、GenericAPIView、ViewSet区别
    python导入包 相对路径踩坑
    【转】Jmeter逻辑控制器-事务控制器的使用
    my live / PC keyboard / Thinkpad Mluti Connect Bluttooth Keyboard with Trackpoint / KT-1525 / KU-1255 / 4x30k12182
    my live / PC GPU NVIDIA Quadro P1000 / Intel UHD Graphics 630 / Dell P2418HT / chumoping
    project architecture evolution
    OS + Linux DevOps
    OS + Linux MP3
  • 原文地址:https://www.cnblogs.com/shaozheng/p/12794437.html
Copyright © 2011-2022 走看看