错误 429,在 google 上使用请求 python 进行简单查询

Adr*_*oli 5 python python-3.x python-requests selenium-webdriver

我试图在 Google 上的一个简单查询中获得第一个非广告结果。

res = requests.get('https://www.google.com?q=' + query)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Par*_*007 5

由于您收到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'}
Run Code Online (Sandbox Code Playgroud)

所以最终的请求将是:

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


Deb*_*anB 5

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/search?q=' + query
      res = requests.get(url, headers=headers)
      print(res)
    
    Run Code Online (Sandbox Code Playgroud)
  • 控制台输出:

      <Response [200]>
    
    Run Code Online (Sandbox Code Playgroud)

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