Scrapy-分布式

63 阅读1分钟

什么是scrapy_redis

scrapy_redis:Redis-based components for scrapy

github地址: github.com/rmax/scrapy…

scrapy-redis 是一个用于分布式爬虫的扩展库,它将 Scrapy 框架与 Redis 数据库结合在一起,使得多个 Scrapy 爬虫实例可以在分布式环境中协同工作。这个扩展库的主要目的是提高爬虫的效率和可扩展性,特别是在处理大量数据或需要多台机器协作的情况下。

  1. 分布式爬虫:

    • 允许多个 Scrapy 爬虫实例共享同一个任务队列(存储在 Redis 中),从而实现分布式爬取。
    • 支持动态添加或移除爬虫节点,方便根据需求进行扩展。
  2. 去重:

    • 使用 Redis 的集合(Set)来存储已爬取的 URL,避免重复爬取相同的页面。
    • 提供多种去重策略,可以根据具体需求选择合适的去重机制。
  3. 调度器:

    • 替换 Scrapy 默认的调度器,使用 Redis 作为请求队列。
    • 支持不同的队列实现,如先进先出(FIFO)、先进后出(LIFO)等。
  4. 持久化:

    • 将请求队列和去重集合存储在 Redis 中,即使爬虫停止或重启,状态也能保持一致。
    • 支持断点续爬,提高了爬虫的健壮性。
  5. 监控:

    • 提供了一些工具和接口,方便监控分布式爬虫的状态和性能。
    • 可以查看当前正在处理的任务、已完成的任务数量、待处理的任务数量等信息。

运行网站中的example-project

allowed_domains = ["dmoz-odp.com"]  
start_urls = ["https://www.dmoz-odp.com/"]

settings.py文件中添加

REDIS_URL = "redis://127.0.0.1:6379"

运⾏结束后redis中多了三个键

dmoz:requests 存放的是待爬取的requests对象

dmoz:item 爬取到的信息

dmoz:dupefilter 爬取的requests的指纹

图片.png