爬虫篇 --- 分布式爬虫

What is 分布式,爬虫?

  使用多台机器组成一个分布式的机群,在机群中运行同一组程序。进行联合数据的爬取 ! 

Scrapy怎么实现分布式?

  原生Scrapy是无法实现分布式的 !

       Reason:

            -  原生scrapy中的调度器无法共享,

            -  原生scrapy中的管道不可以被共享

  Solution:

            -  必须使用scrapy-redis(模块)

    -  该模块可以 给原生的scrapy提供共享的管道和调度器

            -  pip install scrapy-redis

  搭建流程:

1. 创建工程
2. 爬虫文件
3. 将当前爬虫文件的父类修改为 RedisCrawlSpider
4. # allowed_domain 和起始url不再需要,删除 ,然后创建调度器队列名称 redis_key`
5. 数据解析,将解析的数据封装到Item中然后向管道提交。
6. settings.py中重新配置
    - 指定管道 : 
    """
    ITEM_PIPELINES = {
        'scrapy_redis.pipelines.RedisPipeline': 400
    }
    """
    - 指定调度器: 
      """
    # 使用scrapy-redis组件的去重队列
    DUPEFILTER_CLASS =         "scrapy_redis.dupefilter.RFPDupeFilter"
    # 使用scrapy-redis组件自己的调度器
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    # 是否允许暂停
    SCHEDULER_PERSIST = True
      """
    - 指定具体的redis : 
    """
    REDIS_HOST = 'redis服务的ip地址'
    REDIS_PORT = 6379
    REDIS_ENCODING = ‘utf-8’
    REDIS_PARAMS = {‘password’:’123456’}
    """
7. 开启redis服务:
    - redis.windows.conf   取消默认绑定 "127.0.0.1" ;关闭保护模式
    - redis-server
    - redis-cli
8.运行爬虫文件: scrapy runspider SpiderFile.py
9. 向调度器队列中扔入一个起始url(在redis客户端中操作):lpush  redis_key属性值   起始url

    

原文地址:https://www.cnblogs.com/CrazySheldon1/p/10838543.html