如何在响应状态中检测到代码500时自动增加scrapy的DOWNLOAD_DELAY

问题描述 投票:1回答:1

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

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

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

web-scraping scrapy web-crawler delay
1个回答
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,
}
© www.soinside.com 2019 - 2024. All rights reserved.