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

"""
分布式原理:统一的可访问可共享的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远程部署

发布了46 篇原创文章 · 获赞 7 · 访问量 4621

猜你喜欢

转载自blog.csdn.net/Python_DJ/article/details/105366113
今日推荐