Scrapy中的自动限速扩展详解

AutoThrottle extension(自动限速)

该扩展基于Scrapy服务器负载和当前爬取站点的负载,能够将爬虫的爬取速度自动调整至最佳。你只需要设置请求并发数,扩展就可以完成其他工作师以实现自动限制爬虫请求发起的速度。​本文整理自scrapy官方文档

基本思想

AutoThrottle 动态调整请求间的下载延迟,让爬虫平均向各个网站发送AUTOTHROTTLE_TARGET_CONCURRENCY个并发请求。其思想如下:如果服务器响应需要的时间为latency,那客户端每lantency/N秒发送一个请求就能实现N个并发请求。N就是AUTOTHROTTLE_TARGET_CONCURRENCY。Latency指的是建立TCP连接到收到HTTP响应头之间的这段时间。

调整规则

AutoThrottle 根据以下规则调整下载延迟。

  • 每个spider开启时,初始download delay为AUTOTHROTTLE_START_DELAY
  • 当接收到响应时,目标download delay根据lantency/N计算
  • 下一个请求的download delay则为前一个download delay与目标download delay两者的平均数
  • 状态码不为200响应不会将download delay降低
  • download delay不会变得低于DOWNLOAD_DELAY或高于AUTUOTHROTTLE_MAX_DELAY

注意:AutoThrottle 遵从CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IP,还有DOWNLOAD_DELAY的限制。

设置setting.py中的相关变量
  • AUTOTHROTTLE_ENABLED

    True:启用;False:不启用(默认值);

  • AUTOTHROTTLE_START_DELAY

    每一个爬虫的初始download delay,单位是秒,默认值为5.0

  • AUTOTHROTTLE_MAX_DELAY

    允许的最大download delay,单位是秒,以防出现latency过高而导致download delay跟着变高的情况。默认值是60.0

  • AUTOTHROTTLE_TARGET_CONCURRENCY

    针对每个网站的平均并发请求量,默认值是1.0。这是一个平均值,意味着某一时刻的并发量可能高于也可能低于这个值。

  • AUTOTHROTTLE_DEBUG

    调试模式,日志将会打印每次响应消耗的时长latency与当前所设置的当前的Download_delay时长。这样就可以实时观察Download_delay参数的调整过程。True:开启调试;False:关闭调试(默认值)

  • CONCURRENT_REQUESTS_PER_DOMAIN

    单个域名并发数

  • CONCURRENT_REQUESTS_PER_IP

    单个IP并发数量

  • DOWNLOAD_DELAY

    对同一website发起请求的间隔,默认值为0

  • RANDOMIZE_DOWNLOAD_DELAY

    True:启动随机请求间隔,为0.5*DOWNLOAD_DELAY 至 1.5*DOWNLOAD_DELAY之间的的随机数;False:不启动;默认是True,但是因为DOWNLOAD_DELAY的默认值为0,所以要想真正启动还需要设置DOWNLOAD_DELAY

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值