打赏

scrapy分布式爬虫构建步骤

分布式爬虫实现步骤:

1.安装一个scrapy-redis的组件

原生的scrapy不能实现分布式爬虫,必须要让scrapy结合scrapy-redis组件一起实现分布式爬虫。原因是因为原生的scrapy的调度器和管道不可以被分布式集群共享,不能实现集群之间整体的调度。scrapy-redis组件的作用可以给原生的scrapy框架提供可以被共享的管道和调度器。

2.实现流程

  • 创建一个工程
  • 创建一个基于CrawlSpider的爬虫文件
  • 修改当前的爬虫文件:
    • 导包:from scrapy_redis.spider import RedisCrewlSpider
    • 将start_urls和allowed_domains进行注释
    • 添加一个新的属性:redis_key='xxx' (可以被共享的调度器队列的名称)
    • 编写数据解析相关的操作
    • 将当前爬虫类的父类修改成RedisCrawlSpider
  • 修改配置文件settings
    • 指定使用可以被共享的管道:

      ITEM_POPELINES={
          ‘scrapy_redis.pipelines.RedisPipeline': 400
      }

    • 指定调度器:
      • 增加一个去重容器类的配置,使用Redis的set集合来存储请求的数据,实现信息去重持久化

        DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

      • 使用scrapy-redis组件自己的调度器

        SCHEDULER = "scrapy_redis.scheduler.RFPDupeFilter"

      • 配置调度器是否要持久化,即爬虫结束,是否要清空redis中请求队列

        SCHEDULER_PERSIST = True

      • 指定redis服务器:
        • 配置redis的配置文件redis.conf
          • 将bind 127.0.0.1删除
          • 关闭保护模式:protected-mode yes改为no
        • 启动redis
  • 执行工程:
    • scrapy runspider xxx.py
  • 向调度器的队列中放入一个起始的url
    • 调度器的队列在redis的客户端中:lpush xxx www.xxx.com
posted @ 2023-03-08 23:28  不像话  阅读(19)  评论(0编辑  收藏  举报