您的位置:首页 > 数据库 > Redis

scrapy-redis主从式简介

2019-08-15 15:51 176 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_44220464/article/details/99626441

几种爬虫分布式架构

  • scrapy——redis,成熟的分布式框架,redis作为通讯载体读写迅速。
  • RabbitMQ消息中间件 得益于确认机制,可以在高可靠性和高数据要求情景中,避免数据抓取的遗漏和丢失。
  • 实现可以利用scrapy_redis调度执行
  • celery分布式任务队列
      用于异步操作,如tornado ,django异步任务中,通过接口,打造爬虫框架,供他人使用

    原生scrapy无法实现分布式原因:

    • 原生的scrapy中的调度器不可以被共享
    • 原生的scrapy的管道不可以被共享

    scrapy_redis分类

    1. 主从分布式爬虫:
      由一台master服务器, 来提供url的分发, 维护待抓取url的list。由多台slave服务器执行网页抓取功能, slave所抽取的新url,一律由master来处理解析,而slave之间不需要做任何通信。
    2. 对等分布式爬虫:
      由多台相同的服务器集成,每台服务器可单独运作,完成爬虫工作,每台服务器之间的分工有一定的运算逻辑(ex: hash),由运算(配置)的结果,来决定由哪台服务器做抓取网页的工作。

    常用的主从式实现分布式思路:

    • 组成部分: Master端(核心服务器) 搭建redis,存储start_url,request,item,并使用redis指纹去重;持久化数据
  • slaver(爬虫程序执行端)
      爬虫程序,并将新的url加入到队列中

    为何要用scrapy与redis

    • scrapy scrapy将爬虫框架模块化,功能细化,有高拓展性,更易部署。
    • 实时监控:使用item来实现对数据
    • 高效率:twisted异步请求,downloader多线程下载
      -redis
    • Request队列指纹去重,断点续爬,增量爬取

    分布式充点在配置,配置的合理会简化我们的工作量。

    # settings通用配置配置编码:
    USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
    ROBOTSTXT_OBEY = False
    # 线程数,默认为16条,在我们需求和主机配置满足条件下酌情配置
    CONCURRENT_REQUESTS = 16
    # 管道,持久化数据
    ITEM_PIPELINES = {
    # 'fbspro.pipelines.FbsproPipeline': 300,
    'scrapy_redis.pipelines.RedisPipeline': 400
    }
    # 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    # 使用scrapy-redis组件自己的调度器
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    # 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
    SCHEDULER_PERSIST = True
    
    # redis配置
    REDIS_HOST = '192.168.12.198'
    REDIS_PORT = 6379

    增加scrapy效率

    • 增加并发:
      默认scrapy开启的并发线程为32个,可以适当进行增加。在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100。

    • 降低日志级别:
      在运行scrapy时,会有大量日志信息的输出,为了减少CPU的使用率。可以设置log输出信息为INFO或者ERROR即可。在配置文件中编写:LOG_LEVEL = ‘INFO’

    • 禁止cookie:
      如果不是真的需要cookie,则在scrapy爬取数据时可以禁止cookie从而减少CPU的使用率,提升爬取效率。在配置文件中编写:COOKIES_ENABLED = False

    • 禁止重试:
      对失败的HTTP进行重新请求(重试)会减慢爬取速度,因此可以禁止重试。在配置文件中编写:RETRY_ENABLED = False

    • 减少下载超时:
      如果对一个非常慢的链接进行爬取,减少下载超时可以能让卡住的链接快速被放弃,从而提升效率。在配置文件中进行编写:DOWNLOAD_TIMEOUT = 10 超时时间为10s

    参考:

    https://www.geek-share.com/detail/2736187134.html
    https://www.geek-share.com/detail/2713186297.html

  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: