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

        

  • 相关阅读:
    4. 变量
    3.进制的转换
    2 java程序入门
    truncate/delete/drop 区别
    sql server查询优化方法(海量数据)
    C#将DataTable转化成数组
    jq获取表格同一行第一列的内容
    C#将时间格式由yyyyMMdd转化成yyyy-MM-dd
    Easyui改变单元格背景颜色和字体颜色
    js判断数组中是否含有某元素(indexOf/includes)
  • 原文地址:https://www.cnblogs.com/CrazySheldon1/p/10838543.html
Copyright © 2011-2022 走看看