【问题标题】:How to automatically increase scrapy's DOWNLOAD_DELAY while detecting code 500 in response's status如何在检测响应状态中的代码500时自动增加scrapy的DOWNLOAD_DELAY
【发布时间】:2019-01-17 09:18:24
【问题描述】:

我要编写数百个爬虫来爬取不同的静态网页,所以我选择 Scrapy 来帮助我完成我的工作。

在工作中,我发现大多数网站都很简单,不反蜘蛛。但是我发现很难在scrapy.setting.py 文件中设置西装DOWNLOAD_DELAY。有太多蜘蛛要编码,为每个蜘蛛找到合适的DOWNLOAD_DELAY 会让我没时间。

我想知道scrapy加载和使用DOWNLOAD_DELAY参数的型号,以及如何编写程序以在检测服务错误时自动增加DOWNLOAD_DELAY(蜘蛛请求过于频繁)。

【问题讨论】:

  • 如果你的爬虫足够强大,可以将一个网站抱死,你应该从一个更合理的延迟开始:)

标签: web-scraping scrapy web-crawler delay


【解决方案1】:

您可以使用自己的策略扩展负责管理延迟的 AutoThrottle 中间件:

# extensions.py

from scrapy.extensions.throttle import AutoThrottle

class ZombieThrottle(AutoThrottle):
    """start throttling when web page dies"""

    def _adjust_delay(self, slot, latency, response):
        """Define delay adjustment policy"""
        if response.status == 500:
            slot.delay = 60  # 1 minute

并启用它而不是 settings.py 中的默认设置:

# settings.py
EXTENSIONS = {
    'scrapy.extensions.throttle.AutoThrottle': None,
    'myspider.extensions.ZombieThrottle': 0,
}

【讨论】:

  • 爱它,干净的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-01-15
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
相关资源
最近更新 更多