使用请求 python 在谷歌上进行简单查询时出现错误 429

新手上路,请多包涵

我正在尝试通过 Google 上的简单查询获得第一个非广告结果。

 res = requests.get('https://www.google.com?q=' + query)

为查询分配任何值,您将收到错误。我试图添加一些标题,但没有任何变化。

我试图添加谷歌通常与查询相关联的所有其他参数,但同样没有任何变化。

如果您使用 selenium 进行搜索,则没有问题。

错误代码是 429,但这似乎只是对该查询的标准响应。它与我的 IP 无关,我也没有向 Google 发送垃圾邮件,并且这不会在一段时间后消失。

您知道为什么会发生这种情况吗,是否有一些我可以添加的标题,或者任何其他解决方案来查看结果,就像您在谷歌上搜索该关键字一样?

原文由 Adrian Nicoli 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

429 请求过多

HTTP 429 Too Many Requests 响应状态代码表示用户在给定时间内发送了太多请求(“速率限制”)。响应表示应该包括解释条件的详细信息,并且可以包括一个 Retry-After 标头,指示在发出新请求之前等待多长时间。

当服务器受到攻击或仅从一方收到大量请求时,使用 429 状态代码响应每个请求将消耗资源。因此,服务器不需要使用 429 状态码;在限制资源使用时,可能更适合直接断开连接,或采取其他措施。

然而,当我拿你的代码执行相同的测试时,我得到了如下完美的结果:

  • 代码块:
   import requests

  query = "selenium"
  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
  url = 'https://www.google.com?q=' + query
  res = requests.get(url, headers=headers)
  print(res)

  • 控制台输出:
   <Response [200]>

您可以在 无法加载资源中找到相关讨论:服务器通过 Selenium 使用 ChromeDriver Chrome 响应状态为 429(太多请求)和 404(未找到)

原文由 undetected Selenium 发布,翻译遵循 CC BY-SA 4.0 许可协议

因为你得到 status code 429 这意味着你在给定的时间内发送了太多请求(“速率限制”)。在 此处 阅读更多详细信息。

像这样在您的请求中添加标头:

 headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5)\
            AppleWebKit/537.36 (KHTML, like Gecko) Cafari/537.36'}

所以最终的请求将是:

 url = 'https://www.google.com?q=' + query
res = requests.get(url, headers=headers)

原文由 ParthS007 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题