【问题标题】:Error 429 with simple query on google with requests python使用请求 python 在谷歌上进行简单查询时出现错误 429
【发布时间】:2019-11-07 13:05:06
【问题描述】:

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

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

为查询分配任何值,你会得到一个错误。 我试图添加一些标题,但没有任何改变。

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

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

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

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

【问题讨论】:

  • 在此处添加查询和错误信息。

标签: python python-3.x selenium-webdriver python-requests


【解决方案1】:

由于您收到status code 429,这意味着您在给定时间内发送了太多请求(“速率限制”)。详细阅读here

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

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)

【讨论】:

  • 昨天我的标题中有用户代理,但它不起作用,但现在它可以了。我不会说我发送了太多请求,而只是请求“google.com”每次都会给我状态 200。也许相关的事情是我正在使用VPN。但是我会在这个主题上做更多的阅读,谢谢
  • 阿德里安·尼科利,对我来说也是如此。你有想过吗?也许可以在发送新请求之前等待一段时间,但我不确定要多长时间
【解决方案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]>
    

您可以在Failed to load resource: the server responded with a status of 429 (Too Many Requests) and 404 (Not Found) with ChromeDriver Chrome through Selenium找到相关讨论

【讨论】:

    【解决方案3】:

    我找到了 google 简单查询、rest-api 请求产生 429 错误的原因。

    user-agent 标头是原因之一,但我尝试在请求中插入 user-agent 标头。但响应时出现 429 错误。

    我终于找到原因了,原因是cookies。

    如果您想访问 google 页面 api,首先您必须从 google.com、trend.google.com、YouTube.com 等基本 google url 获取 cookie。可以使用任何请求方法访问此基本站点。

     googleTrendsUrl = 'https://google.com'
     response = requests.get(googleTrendsUrl)
     if response.status_code == 200:
        g_cookies = response.cookies.get_dict()
    

    这个 cookie 通过用户代理插入到 api 请求中

      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, cookies=g_cookies)
    

    【讨论】:

      【解决方案4】:

      这是 StackOverFlow 上最常见的问题,在 [requests][bs4] 标签中被问了 200 多次,几乎每个解决方案都只是简单地添加 user-agent

      当机器人或浏览器发送虚假的user-agent 字符串以宣布自己为不同的客户端时,需要User-agent 充当“真实”用户访问。

      如果在使用requests 库时没有将user-agent 传递给请求headers,则默认为python-requests,并且Google 知道它是一个机器人/脚本,然后它会阻止请求(或它所做的任何事情)并且您会收到带有不同 CSS 选择器的不同 HTML(带有某种错误)。检查what's your user-agentList of user-agents.

      我写了一篇关于how to reduce chance of being blocked while web scraping search engines的专门博客。

      注意:添加 user-agent 并不意味着它会解决问题,您仍然可能会收到 429(或不同)错误,即使在旋转 user-agents 时也是如此 em>。

      通过user-agent:

      headers = {
          'User-agent':
          'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582'
      }
      
      requests.get('URL', headers=headers)
      

      或者,您可以使用来自 SerpApi 的 Google Organic Results API 来实现相同的目的。这是一个带有免费计划的付费 API。

      不同之处在于,您不必花时间试图绕过 Google 的阻止并找出某些事情为什么不能正常工作。相反,您需要专注于要提取的数据。查看playground

      免责声明,我为 SerpApi 工作。

      【讨论】:

        【解决方案5】:

        如今,仅仅将用户代理更改为一个好的用户代理并不总是完美的,因为 Google 实施了更好的抓取保护。您可能想尝试https://rapidapi.com/restyler/api/google-search26,它在后台使用高质量代理来避免遇到 429 和验证码。

        【讨论】:

        • 如果您为 RapidAPI 工作或与 RapidAPI 相关,您应该在回答中披露。
        • rapidapi 的重要提示。谢谢。
        猜你喜欢
        • 2021-12-09
        • 2018-03-15
        • 1970-01-01
        • 1970-01-01
        • 2018-09-13
        • 1970-01-01
        • 1970-01-01
        • 2023-01-27
        • 2016-08-25
        相关资源
        最近更新 更多