我将编写数百个蜘蛛来抓取不同的静态网页,所以我选择Scrapy来帮助我完成我的工作。
在工作期间,我发现大多数网站都很简单,没有反蜘蛛。但我发现很难在DOWNLOAD_DELAY
文件中设置套装scrapy.setting.py
。有太多的蜘蛛编码,找到一个合适的DOWNLOAD_DELAY
为每个蜘蛛将运行我的时间。
我想知道scrapy的哪些模型加载并使用DOWNLOAD_DELAY
参数,以及如何编写程序以在检测到服务错误时自动增加DOWNLOAD_DELAY
(蜘蛛请求过于频繁)。
您可以使用自己的策略扩展负责管理延迟的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,
}