• 分布式爬虫


    分布式爬虫

    • 什么是分布式爬虫

      • 基于多台电脑组件一个分布式机群,然后让每一台电脑执行同一组程序,让后让他们对同一个网站的数据进行分布式爬取
    • 为什么使用分布式爬虫

      • 提示爬取数据效率
    • 如何实现分布式爬虫

      • 基于scrapy + redis 的形式实现分布式
        • 原生的scrapy框架不能实现分布式,原因:
          1. 调度器无法被分布式机群共享
          2. 管道无法数据共享
        • scrapy框架和scrapy-redis 组件实现的分布式
        • scrapy-redis 组件作用:
          1. 提供可以被共享的调度器和管道

    环境安装

    • redis
    • pip install scrapy-redis

    编码流程

    1. 创建一个工程

    2. 创建一个爬虫文件:基于CrawlScrapy

      • 修改当前的爬虫文件
        • 导包:from scrapy_redis.spiders import RedisCrawlSpider
        • 将当前爬虫类的父类修改成RedisCrawlSpider
        • 将start_urls替换成redis_key = ‘xxx’ #表示的是可被共享调度器中队列的名称
        • 编写爬虫类爬取数据的操作
    3. 对settings进行配置:

      • 指定管道:

        # 开启可以被共享的管道
        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的服务

        REDIS_HOST = 'redis服务的ip地址'
        REDIS_PORT = 6379
        
    4. redis的配置文件进行配置:redis.windows.conf

      -取消ip绑定:#bind 127.0.0.1
      -取消安全模式:protected-mode no

      • 携带配置文件启动redis服务
        • ./redis-server redis.windows.conf
      • 启动redis的客户端
        • redis-cli
    5. 执行当前的工程:

      进入到爬虫文件对应的目录中:scrapy runspider xxx.py
      
    6. 向调度器队列中仍入一个起始的url:

      • 队列在哪里呢?答:队列在redis中
        • lpush fbsQueue www.xxx.com
  • 相关阅读:
    在linux上使用Android systrace
    perf性能调优
    未初始化内存检测(MSan)
    数据竞争检查工具(TSan)
    应用层内存溢出/越界/重复释放等问题检查工具(ASan)
    gperf heap profiler
    cmake打印shell
    github clone加速
    获取一个进程的所有物理地址上的内存
    Jenkins <1>: System Management
  • 原文地址:https://www.cnblogs.com/bigox/p/11453628.html
Copyright © 2020-2023  润新知