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

    # 分布式概念:
    
    使用多台机器组成一个分布式的机群,在机群中运行同一组程序,进行联合数据的爬取。
    
    # 原生scrapy无法实现分布式原因:
    
    - 原生的scrapy中的调度器不可以被共享
    
    - 原生的scrapy的管道不可以被共享
    
    # 使用scrapy实现分布式思路:
    
    - 为原生的scrapy框架提供共享的管道和调度器
    
    - pip install scrapy_redis
    
    - 1. 创建工程: scrapy startproject projectname
    
    - 2. 爬虫文件: scrapy genspider -t crawl spidername www.baidu.com
    
    - 3. 修改爬虫文件:
        - 3.1 导包:from scrapy_redis.spiders import RedisCrawlSpider
        - 3.2 将当前爬虫类的父类进行修改RedisCrawlSpider
        - 3.3 allowed_domains,start_url注释掉,添加一个新属性redis_key='qn'(调度器        队列的
    名称)
        - 3.4 指定redis_key = 'xxx', 即共享调度器队列名字
        - 3.4 数据解析,将解析的数据封装到item中然后向管道提交
    - 4. 配置文件的编写:
        - 4.1 指定管道:
        ITEM_PIPELINES = {
        'scrapy_redis.pipelines.RedisPipeline': 400
        }
        - 4.2 指定调度器:
        # 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    
    # 使用scrapy-redis组件自己的调度器
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
     
    # 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
    SCHEDULER_PERSIST = True
        - 4.3 指定具体的redis:
    REDIS_HOST = 'redis服务的ip地址'
    REDIS_PORT = 6379
    - 5. 修改Redis配置并指定配置启动:
    - #bind 127.0.0.1
    - protected-mode no
    - 开启redis服务(携带redis的配置文件:redis-server ./redis.windows.conf),和客户端
    (redis-cli):
    - 6. 启动程序:scrapy runspider xxx.py(需要进入spider文件夹)
    - 7. 向调度器队列中扔入一个起始的url(redis的客户端):lpush xxx www.xxx.com
    (xxx表示的就是redis_key的值)            
  • 相关阅读:
    如何用命令将本地项目上传到github
    Mysql基本命令一
    Mysql基本命令二
    PDO操作数据库
    PHP分页
    JQuery中$.ajax()方法参数详解
    基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
    IE浏览器兼容问题
    购物车的实现方式
    JS学习之路
  • 原文地址:https://www.cnblogs.com/weiwuhu/p/12461665.html
Copyright © 2011-2022 走看看