zoukankan      html  css  js  c++  java
  • 爬虫篇 --- 分布式爬虫

    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

        

  • 相关阅读:
    local http
    redis 存储时间区间的数据
    json 和 jsonp
    ssdb 常用命令行
    php 冒泡排序
    pdo 函数
    异步的消息队列
    php 全局变量$_SERVER
    php 技能树
    get_called_class/get_class方法
  • 原文地址:https://www.cnblogs.com/CrazySheldon1/p/10838543.html
Copyright © 2011-2022 走看看