Pytrends:请求失败:Google 返回代码为 429 的响应

新手上路,请多包涵

我正在使用 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'})

我怎样才能解决这个问题?非常感谢!

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

阅读 1.5k
2 个回答

这花了一段时间,但事实证明图书馆只需要更新。您可以查看我在此处发布的一些方法,这两种方法都会导致状态 429 响应:

https://github.com/GeneralMills/pytrends/issues/243

最终,我能够通过在我的 bash 提示符下运行以下命令来让它再次工作:

跑步:

pip install --upgrade --user git+https://github.com/GeneralMills/pytrends

对于最新版本。

希望这对你也有用。

编辑:

如果您无法从源代码升级,您可能会遇到一些运气:

pip install pytrends --upgrade

另外,如果在 Windows 上,请确保您以管理员身份运行 git。

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

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

解释

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

解决方案

我通过以下方式解决了:

  1. 首先,当您使用 Google 帐户登录时,您必须从您的网络浏览器使用 google trends;
  2. 为了跟踪实际生成的 HTTP GET:(我正在使用 Chromium)进入“更多工具”->“开发人员工具”->“网络”选项卡。
  3. 访问 谷歌趋势 页面并搜索趋势;它将在“网络”选项卡的左侧栏中触发大量 HTTP 请求;
  4. 确定 GET 请求(在我的例子中是 /trends/explore?q=topic&geo=US)并右键单击它并选择 Copy -> Copy as cURL;
  5. 然后转到 此页面 并将 cURL 脚本粘贴到左侧,并复制您可以在页面右侧生成的 python 脚本中找到的“headers”字典;
  6. 然后转到您的代码并将 TrendReq 类子类化,这样您就可以传递刚刚复制的自定义标头: “` 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. 如果以后再次出现错误消息:重复该过程。您需要使用新值更新标头字典,这可能会触发验证码机制。

原文由 Antonio Ercole De Luca 发布,翻译遵循 CC BY-SA 4.0 许可协议

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