记忆碎片之python爬虫scrapy-redis分布式架构

本文介绍Scrapy分布式爬虫的架构原理,包括统一的requests队列、主机Master与从机slave的协作机制、Redis队列维护及去重策略。阐述了如何利用scrapy-redis库实现分布式爬虫,以及settings.py文件的配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

"""
分布式原理:统一的可访问可共享的requests队列
分布式架构:主机Master用来维护爬取队列(redis),从机slave1,slave2...负责数据抓取、处理、存储
队列维护  :Redis队列
    # 非关系型数据库,Key-Value形式存储,结构灵活
    # 内存中的数据结构存储系统,处理速度快,性能好
    # 提供队列、集合等多种存储结构,方便队列维护
去重:requests队列不重复的,使用Redis集合
    # Redis提供集合数据结构,在Redis集合中存储每个Request的指纹(算法)
    # 在向Request对立中加入新的Request前首先验证这个Request的指纹是否已经加入到集合中
    # 如果已经存在,则不添加Request到队列,如果不存在,则添加Request到队列并将指纹加入集合
防止中断:启动判断
    # 在每台从机slave的scrapy启动时都会首先判断当前Redis Request队列是否为空
    # 如果不为空,则从队列中取得下一个Request执行爬取
    # 如果为空,则重新开始爬取,第一台从机执行爬取想队列中添加Request
实现架构:scrapy-redis库
    # scrapy-redis库实现了如上架构,改写了scrapy的调度器、队列等组件,
    # 利用它可以方便地实现scrapy分布式架构
修改范围:settings.py
    # https://github.com/rmax/scrapy-redis
    # 参考github给的文档,修改本地爬虫项目的settings文件
        # Enables scheduling storing requests queue in redis.
        # SCHEDULER = "scrapy_redis.scheduler.Scheduler"

        # Ensure all spiders share same duplicates filter through redis.
        # DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

        # Specify the full Redis URL for connecting (optional).
        # If set, this takes precedence over the REDIS_HOST and REDIS_PORT settings.
        # REDIS_URL = 'redis://user:pass@hostname:6379'     # hostname服务器IP地址

        # Don't cleanup redis queues, allows to pause/resume crawls.
        # SCHEDULER_PERSIST = True  # true是指纹和request队列不会被清空,默认为false

        # SCHEDULER_FLUSH_ON_START = False
        # true时,重新启动爬虫时,会自动清空指纹和Request队列,相当于从新开始爬取,默认false
    # 配置Redis的url
    # 把项目放到一个服务器上面
    # 当本地项目启动的时候,request和request指纹存到了Redis数据库
    # 当启动另一台时,会自动读取Request队列里面的数据
    # 当数据存储的时候,可以使用MongoDB,这样数据会分别存储在当前主机上面,前提是没有用pipelines(Redis管道)
"""
# 部署多台主机 scrapyd
# 通过API远程部署

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值