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

时间:2019-01-17 09:18:25

标签: web-scraping scrapy web-crawler delay

我将编写数百个Spider来爬行不同的静态网页,因此我选择Scrapy帮助我完成工作。

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

我想知道哪种模型的拼凑负载并使用DOWNLOAD_DELAY参数,以及如何编写程序以在检测到发球错误时自动增加DOWNLOAD_DELAY(蜘蛛请求太频繁)。

1 个答案:

答案 0 :(得分: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,
}