gpt4 book ai didi

scrapy - 是否可以在scrapy中设置动态下载延迟?

转载 作者:行者123 更新时间:2023-12-03 23:11:53 25 4
gpt4 key购买 nike

我知道可以设置一个恒定的延迟

settings.py
DOWNLOAD_DELAY = 2

但是,如果我将延迟设置为 2 秒,则效率不够。如果我设置 DOWNLOAD_DELAY = 0。

爬虫能够爬取大约 10 个页面。之后,目标页面将返回类似“您请求太频繁”的内容。

我想要做的是将download_delay保持为0。一旦在html中找到“请求过于频繁”的消息。它将延迟更改为2s。一段时间后,它切换回零。

有没有什么模块可以做到这一点?或任何其他更好的想法来处理这种情况?

更新:
我发现这是一个分机电话 AutoThrottle
但它能够自定义一些这样的逻辑吗?
if (requesting too frequently) is found
increase the DOWNLOAD_DELAY

最佳答案

如果在你得到防蜘蛛页面之后,那么在2秒内你就可以得到数据页面,那么你所要求的可能需要编写一个下载器中间件
检查反蜘蛛页面,将所有计划的请求重置为更新队列,在蜘蛛空闲时启动循环调用以从更新队列获取请求,(循环间隔是您对新下载延迟的破解),以及尝试确定何时不再需要下载延迟(需要一些测试),然后停止循环并将 renew-queue 中的所有请求重新调度到 scrapy 调度程序。在分布式抓取的情况下,您将需要使用 redis 队列。

将下载延迟设置为 0,根据我的经验,吞吐量可以轻松超过 1000 项/分钟。如果10次回复后弹出防蜘蛛页面,那是不值得的。

相反,也许您可​​以尝试找出您的目标服务器允许多快,可能是 1.5s、1s、0.7s、0.5s 等。然后重新设计您的产品可能会考虑到您的爬虫可以实现的吞吐量。

关于scrapy - 是否可以在scrapy中设置动态下载延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27266862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com