• scrapcrawl + scrapyredis分布式


    分布式:
    - 概念:组件一个分布式的机群,让后让其共同执行同一组程序,实现数据的分布爬取。
    - 如何实现分布式?
    - scrapy-redis组件结合原生的scrapy实现分布式
    - 原生的scrapy是无法实现分布式?
    - 无法共享一个调度器
    - 无法共享同一个管道
    - scrapy-redis作用:
    - 可以给scrapy提供共享的调度器和管道

    分布式编码流程:
    1.工程的创建
    2.创建爬虫文件
    - Spider
    - CrawlSpider
    3.修改爬虫文件:
    - 导包:from scrapy_redis.spiders import RedisCrawlSpider
    - 将爬虫类的父类修改成RedisCrawlSpider
    - 将allow_demains和start_urls删除
    - 添加一个新属性:redis_key = 'xxx':调度器队列的名称
    - 完善爬虫类的相关代码(连接提取器,规则解析器,解析方法)

    4.配置文件的编写:
    - 指定管道:
    ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 400
    }
    - 指定调度器:
    # 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    # 使用scrapy-redis组件自己的调度器
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    # 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
    SCHEDULER_PERSIST = True

    - 指定数据库:
    REDIS_HOST = 'redis服务的ip地址'
    REDIS_PORT = 6379

    5.修改redis的配置:redis.windows.conf
    - 关闭默认绑定:#bind 127.0.0.1
    - 关闭保护模式:protected-mode no
    6.结合着配置文件启动redis服务
    - redis-server ./redis.windows.conf
    7.启动redis客户端
    - redis-cli
    8.启动执行分布式工程:
    - scrapy crawl fbs
    - scrapy runspider ./xxx.py
    9.向调度器队列中扔入一个起始的url:
    - 调度器的队列是存放在redis中
    - 在redis-cli:lpush redis_key的值 www.xxx.com

  • 相关阅读:
    0~n-1中缺失的数字
    仅仅反转字母
    字符串相加
    反转字符串&反转字符串中的元音字母
    python OrderedDict类&LRU缓存机制练习题
    协程greenlet、gevent、猴子补丁
    生产者与消费者(两个线程之间的通信---队列实现)
    jquery的on()
    Python之内置类型
    Python之比较运算符
  • 原文地址:https://www.cnblogs.com/duoduoyichen/p/11129338.html
Copyright © 2020-2023  润新知