gpt4 book ai didi

python - 派趋势 : The request failed: Google returned a response with code 429

转载 作者:行者123 更新时间:2023-11-28 20:33:28 26 4
gpt4 key购买 nike

我正在使用 Pytrends 提取 Google 趋势数据,例如:

from pytrends.request import TrendReq
pytrend = TrendReq()
pytrend.build_payload(kw_list=['bitcoin'], cat=0, timeframe=from_date+' '+today_date)

它返回一个错误:

ResponseError: The request failed: Google returned a response with code 429.

我昨天成功了,但出于某种原因现在无法使用了! github的源码也失败了:

pytrends = TrendReq(hl='en-US', tz=360, proxies = {'https': 'https://34.203.233.13:80'})

我该如何解决这个问题?非常感谢!

最佳答案

TLDR;我用自定义补丁解决了这个问题

说明

问题来自谷歌机器人识别系统。与其他类似系统一样,它会停止为来自可疑客户端的过于频繁的请求提供服务。用于识别可信赖客户端的一些功能是存在由网页上的 javascript 代码生成的特定 header 。不幸的是,python 请求库不提供针对那些机器人识别系统的这种级别的伪装,因为甚至不执行 javascript 代码。所以我的补丁背后的想法是利用我的浏览器生成的标题与谷歌趋势交互。这些 header 是在我使用我的谷歌帐户登录时由浏览器生成的,换句话说,这些 header 与我的谷歌帐户相关联,因此对他们来说,我是值得信赖的。

解决方案

我是这样解决的:

  1. 首先,您必须在使用您的 Google 帐户登录时从您的网络浏览器使用 Google 趋势;
  2. 为了跟踪实际生成的 HTTP GET:(我使用的是 Chromium)进入“更多工具”->“开发人员工具”->“网络”选项卡。
  3. 访问Google Trend页面并搜索趋势;它将在“网络”选项卡的左侧栏中触发大量 HTTP 请求;
  4. 确定 GET 请求(在我的例子中是/trends/explore?q=topic&geo=US)并右键单击它并选择复制 -> 复制为 cURL;
  5. 然后转到this page并将 cURL 脚本粘贴到左侧,并复制您可以在页面右侧生成的 python 脚本中找到的“headers”字典;
  6. 然后转到您的代码并将 TrendReq 类子类化,这样您就可以传递刚刚复制的自定义 header :
from pytrends.request import TrendReq as UTrendReq
GET_METHOD='get'

import requests

headers = {
...
}


class TrendReq(UTrendReq):
def _get_data(self, url, method=GET_METHOD, trim_chars=0, **kwargs):
return super()._get_data(url, method=GET_METHOD, trim_chars=trim_chars, headers=headers, **kwargs)

  1. 从您的代码中删除任何“import TrendReq”,因为现在它将使用您刚刚创建的代码;
  2. 重试;
  3. 如果以后再次出现错误消息:重复该过程。您需要使用新值更新 header 字典,这可能会触发验证码机制。

关于python - 派趋势 : The request failed: Google returned a response with code 429,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50571317/

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