如何在发送到 Google 的查询之间添加随机延迟以避免在 python 中被阻塞

我已经写了一个程序,发送超过15个查询到谷歌在每个迭代,总迭代约50。为了测试,我必须运行这个程序几次。然而,这样做了几次之后,谷歌屏蔽了我。有没有什么方法可以让我在每次迭代之间添加延迟来愚弄谷歌?我还听说谷歌可以学习时间步骤。所以我需要这些延迟是随机的,所以谷歌不能找到一个模式从它学习我的行为。而且它应该很短,这样整个过程就不用花那么多时间。 有人知道些什么吗,或者能给我提供一段 Python 代码吗? 谢谢

121725 次浏览

首先,Google 可能会屏蔽你,因为他们不喜欢你占用他们太多的资源。解决这个问题的最好方法是放慢速度,而不是随意地延迟。在每个请求之后坚持1秒钟的等待,你可能就不会再有问题了。

也就是说:

from random import randint
from time import sleep


sleep(randint(10,100))

睡眠时间是随机的(在10到100秒之间)。

既然你不是在测试谷歌的速度,那就想办法在测试的时候模拟一下(就像@bstpire 在他的评论中建议的那样)。这应该可以解决您的问题,并且同时考虑到它的可变响应超时。

您也可以尝试使用少量代理服务器,以防止禁止 IP 地址。Urllib 通过特殊的构造函数参数支持代理,httplib 也可以使用代理

最佳使用方法:

from numpy import random
from time import sleep


sleeptime = random.uniform(2, 4)
print("sleeping for:", sleeptime, "seconds")
sleep(sleeptime)
print("sleeping is over")

作为一个开始,慢慢减小范围,看看什么工作最好(最快)。

对于那些在2022年遇到“如何在我的例行程序中添加随机延迟”这种情况的人来说,numpy 推荐的方法是使用他们的随机数生成器类:

from numpy.random import default_rng
from time import sleep


rng = default_rng()


# generates a scalar [single] value greater than or equal to 1
# but less than 3
time_to_sleep = rng.uniform(1, 3)


sleep(time_to_sleep)

[1] https://numpy.org/doc/stable/reference/random/index.html#quick-start