爬虫---scrapy分布式和增量式

分布式

  • 概念: 需要搭建一个分布式的机群, 然后在每一台电脑中执行同一组程序, 让其对某一网站的数据进行联合分布爬取.

  • 原生的scrapy框架不能实现分布式的原因

    • 调度器不能被共享,
    • 管道也不能被共享.
  • scrapy + scrapy-redis 可以实现分布式

  • scrapy-redis组件的作用:

    • 可以提供可被共享的调度器和管道
    • 特性: 数据只可以存储到redis数据库中
  • 分布式的实现流程:

    1. 安装组件pip install scrapy-redis

    2. 创建scrapy工程

    3. cd 工程目录中

    4. 创建爬虫文件: 基于Spider的爬虫或者基于CrawlSpider的爬虫

    5. 修改爬虫类:

      1. 导包 from scrapy_redis.spiders import RedisCrawlSpider
      2. 修改当前爬虫类的父类为 RedisCrawlSpider
      3. allowed_domains和start_urls删除
      4. 添加一个新属性: redis_key = 'fbsQueue', 表示的是可以被共享的调度器队列名称
      5. 编写爬虫类的常规操作
    6. settings配置文件的配置

      1. UA伪装
      2. Robots协议
      3. 指定管道:
      ITEM_PIPELINES = {
          'scrapy_redis.pipelines.RedisPipeline': 400
      }
      
      1. 指定调度器
      # 增加一个去重容器类的配置, 作用是使用redis的set集合来存储请求的指纹数据, 实现请求去重的持久化
      DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
      
      # 使用scrapy-redis组件自己的调度器
      SCHEDULER = "scrapy_redis.scheduler.Scheduler"
      
      # 配置调度器是否要持久化, 即当爬虫结束时, 要不要清空redis中请求队列和去重指纹的set.
      # 如果是True, 表示要持久化存储, 就不会清空数据, 否则清空数据
      SCHEDULER_PERSIST = True
      
      1. 指定数据库
      REDIS_HOST = 'redis服务器的ip地址'
      REDIS_PORT = 6379
      
    7. redis的配置文件进行配置 redis.windows.conf

      1. 关闭默认绑定: 56行注释: bind 127.0.0.1
      2. 关闭保护模式: 75行: protected=mode no
      3. 启动redis的服务端和客户端
      redis-server.exe redis.windows.conf
      redis-cli
      
    8. 启动程度 scrapy runspider xxx.py

    9. 向调度器的队列中仍入一个起始的url:

      1. 队列是存在于redis中
      2. 开启redis的客户端: lpush fbsQueue https://movie.douban.com/top250?start=0&filter=

增量式

  • 概念: 用于监测网站数据更新的情况
  • 核心机制: 去重, 可以使用redis的set实现去重
posted @ 2020-09-25 11:23  凯旋.Lau  阅读(143)  评论(0编辑  收藏  举报