• 15-scrapy-redis两种形式分布式爬虫


    什么叫做分布式爬虫?

      分布式爬虫,就是多台机器共用一个scrapy—redis程序高效爬取数据,

      为啥要用分布式爬虫?

        其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url。(多台机器无法共享同一个调度器)

        其二:多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储。(多台机器无法共享同一个管道)

    scrapy-redis组件分布式爬虫:

      scrapy-redis为我们封装好了多台机器共用的管道以及调度器,导入包调用链接即可实现分布式爬虫。

     分布式实现的方式:1、基于该组件的RedisSpider类

              2、基于该组件的RedisCrawlSpider类

    分布式实现流程:上述两种不同方式的分布式实现流程是统一的。

      1、下载scrapy-redis组件:

    pip3 install scrapy-redis

      2、导包:

    from scrapy_redis.spiders import RedisCrawlSpider

      3、修改爬虫文件的代码

        1)将当前爬虫类的父类修改成RedisCrawlSpider

        2)将start_urls删除

        3)添加一个新属性redis_key = "ts":可以被共享调度器中的队列名称

    # -*- coding: utf-8 -*-
    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    from scrapy_redis.spiders import RedisCrawlSpider
    
    class MoviesSpider(RedisCrawlSpider):#修改爬虫类的文件
        name = 'Movies'
        # allowed_domains = ['www.xxx.com']
        # start_urls = ['https://www.4567tv.tv/frim/index1.html']
        redis_key ="ts"#添加一个新属性,redis_key = "ts":可以被共享调度器中的队列名称

      4、设置管道(settings.py)

    # Configure item pipelines
    # See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
    ITEM_PIPELINES = {
        'scrapy_redis.pipelines.RedisPipeline': 400
       # 'RedisCrawlPro.pipelines.RediscrawlproPipeline': 300,
    }

      5、设置调度器:(settings.py) 在配置文件中进行相关配置,开启使用scrapy-redis组件中封装好的调度器

     # 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
            DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
            # 使用scrapy-redis组件自己的调度器
            SCHEDULER = "scrapy_redis.scheduler.Scheduler"
            # 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
            SCHEDULER_PERSIST = True

      6、指定redis服务器(settings.py)在配置文件中进行爬虫程序链接redis的配置:

           REDIS_HOST = '本机IP'
               REDIS_PORT = 6379
           REDIS_ENCODING = ‘utf-8’
           REDIS_PARAMS = {‘password’:’123456’}
      

      7、redis配置文件的配置:

    #配置redis:
                修改Redis的配置文件:redis.windows.conf
                     #bind 127.0.0.1
                     protected-mode no
            8、携带配置文件启动redis服务:
                 redis-server ./redis.windows.conf
            9、启动redis客户端
    
            10、执行工程:scrapy runspider xxx.py
    
            11、手动将起始url扔入调度器的队列中(redis-cli):lpush ts www.xxx.com
    
            12、redis-cli: items:xxx#储存文件

    备注终端储存数据: 

    scrapy crawl CrawlName -o 文件.csv
  • 相关阅读:
    【转】centos7关闭图形界面启动系统
    回顾测试入行以来的一些感受,浅谈对测试管理方面一些见解
    linux安装完全踩坑手册
    selenium 自动化测试个人总结(一)
    性能测试之数据库篇-查询(五 补充)
    性能测试之数据库篇-查询(四)
    性能测试之数据库篇-查询(三)
    性能测试之数据库篇-查询(二)
    性能测试之数据库篇-查询(一)
    性能测试之数据库篇-查询
  • 原文地址:https://www.cnblogs.com/lishuntao/p/11645008.html
Copyright © 2020-2023  润新知