我使用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'})
型
我该怎么解决这个问题?非常感谢!
6条答案
按热度按时间x8goxv8g1#
TLDR;我用自定义补丁解决了这个问题
说明
问题来自Google bot识别系统。与其他类似系统一样,它停止服务来自可疑客户端的过于频繁的请求。用于识别可信客户端的一些功能是由网页上的JavaScript代码生成的特定头的存在。不幸的是,python requests库并没有提供针对那些bot识别系统的这种级别的伪装,因为JavaScript代码甚至没有被执行。利用我的浏览器与谷歌趋势交互生成的标题。这些标题是由浏览器生成的,同时我使用我的谷歌帐户登录,换句话说,这些标题与我的谷歌帐户相关联,所以对他们来说,我是值得信赖的。
解决方案
我用下面的方法解决:
1.首先,您必须在使用Google帐户登录时从Web浏览器使用Google趋势;
1.为了跟踪实际的HTTP GET:(我使用Chromium)进入“更多工具”->“开发人员工具”->“网络”选项卡。
1.访问Google Trend页面并搜索趋势;它将在“网络”选项卡的左侧边栏上触发大量HTTP请求;
1.识别GET请求(在我的例子中是/trends/explore?q=topic&geo=US),右键单击它,然后选择Copy -> Copy as cURL;
1.然后转到this page并将cURL脚本粘贴到左侧,并复制页面右侧生成的python脚本中的“headers”字典;
1.然后转到你的代码并子类化TrendReq类,这样你就可以传递刚刚复制的自定义头:
字符串
1.从你的代码中删除任何“import TrendReq”,因为现在它将使用你刚刚创建的这个;
1.再次鞠躬;
1.如果将来出现错误消息:重复这个过程。你需要用新的值更新头字典,它可能会触发验证码机制。
kmbjn2e32#
这一个花了一段时间,但结果是库只是需要更新。你可以看看我在这里发布的一些方法,这两种方法都导致了状态429响应:
https://github.com/GeneralMills/pytrends/issues/243
最终,我能够通过在bash提示符下运行以下命令使它再次工作:
运行:
第一个月
最新版本。
希望这对你也有用。
编辑:
如果你不能从源代码升级,你可能会有一些运气:
pip install pytrends --upgrade
个另外,如果在Windows上,请确保您以管理员身份运行git。
xa9qqrwz3#
即使在用
pip install --upgrade --user git+https://github.com/GeneralMills/pytrends
更新模块并重新启动python之后,我也遇到了同样的问题。但是,这个问题是通过以下方法解决的:
而不是
字符串
刚跑:
的
希望这能有所帮助!
xxb16uws4#
通过pip install运行upgrade命令后,您应该重新启动python内核并重新加载pytrend库。
slwdgvem5#
我也遇到了同样的问题,做了一些与Antonio Ercole De Luca非常相似的事情。然而,对我来说,问题在于 * cookie *,而不是标题。
我像Antonio一样创建了一个子类,但这次修改了cookie方法:
字符串
我使用了和他获取头部相同的方法来获取cookie:
1.访问trends.google.com
1.打开开发人员工具,然后转到网络选项卡
1.进行搜索,然后右键单击顶部的GET请求(应该看起来像explore?q=...)
1.将请求复制为cURL
1.把这个贴到curlconverter.com上,然后得到饼干!
tcbh2hod6#
现在我们再次面临同样的问题,以下代码将有助于解决429问题
下面的代码将通过更改浏览器多次重试
字符串
下面的代码为顶部和上升顶部
的