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

    分布式爬虫

    • 什么是分布式爬虫

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

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

      • 基于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
  • 相关阅读:
    spool使用
    webservice项目部署部署到weblogic报错之解决方案
    cxf , struts+spring中web.xml过滤url问题解决方案
    eclipse配置SVN
    Oracle中的dual表
    tomcat在eclipse启动成功却打不开tomcat主页
    java作用域public ,private ,protected
    final static
    sql server 通明加密
    检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
  • 原文地址:https://www.cnblogs.com/bigox/p/11453628.html
Copyright © 2011-2022 走看看