我正试图从谷歌趋势中提取数据,但只尝试了两次就出现了"You have reach your daily limit"错误。
有什么办法绕过这个吗?我知道谷歌API项目有特殊的配额限制,但谷歌趋势没有API。我还读到,我们可能需要向它传递一个cookie文件,这样看起来我已经登录了。以前有人遇到过这个问题吗?
我也在为同样的问题而挣扎!从你的问题我不知道你达到了什么阶段。。。但这是我找到的解决方案:
- 你应该用cookie来模仿浏览器。我认为最好的方法是使用机械化库
- 首先,您的程序应该使用GET请求"登录"到https://accounts.google.com/Login?hl=en"
- 在那之后,你可以立即访问其他一些个人资源,,但不能访问谷歌趋势
- 经过一些重要的时间后,您可以成功地以CSV的形式获取谷歌趋势数据
- 我还没有发现确切的时间段,但它超过了10分钟,不到几个小时:)。这就是为什么保存您的cookie以备日后使用是个好主意
更多提示:
-
如果您在Windows下使用python/ruby进行开发,请不要忘记为OpenSSL库设置CA ROOT证书包。否则HTTPS连接将失败,您将无法登录!请参阅使用机械化对象获取"证书验证失败(OpenSSL::SSL::SSLError)"错误
-
我建议您在程序关闭时将cookie保存到外部文件。并在启动时恢复它们。
-
不要忘记允许重定向,因为谷歌一直在使用重定向。
Ruby代码示例:
require 'mechanize'
require 'logger'
begin
agent = Mechanize.new { |a|
a.user_agent = 'Opera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.16'
cert_store = OpenSSL::X509::Store.new
cert_store.add_file 'cacert.pem'
a.cert_store = cert_store
a.log = Logger.new('mech.log')
if File.file?('mech.cookies')
cookies = Mechanize::CookieJar.new
cookies.load('mech.cookies')
a.cookie_jar = cookies
end
a.open_timeout = 5
a.read_timeout = 6
a.keep_alive = true
a.redirect_ok = true
}
LOGIN_URL = "https://accounts.google.com/Login?hl=en&continue=http://www.google.com/trends/"
login_page = agent.get(LOGIN_URL)
login_form = login_page.forms.first
login_form.Email = *
login_form.Passwd = *
login_response_page = agent.submit(login_form)
page = agent.get(url)
# DO SOME TRENDS REQUESTS AFTER SIGNIFICANT PERIOD OF TIME
ensure
if agent
agent.cookie_jar.save('mech.cookies')
end
end
您可能禁用了cookie,这让Google Trends认为您是一个机器人
我想我已经找到了解决这个问题的方法。只要确保您使用cookie PREF
调用Google Trends API。也就是说,你不需要登录谷歌帐户。当然,您不需要模仿浏览器。cookie PREF
就足够了。
好的。cookie PREF
来自哪里?这很容易。只需打开浏览器,然后登录您的谷歌帐户。最后,在谷歌网站下查找cookie PREF
,它就在域www.google.com
下。然后将cookie PREF
的值复制到您的程序或脚本中。仅此而已。
通过这种方式,我在几秒钟内调用了数百次谷歌趋势API。祝你好运!
我在谷歌趋势中发现了这篇关于预防或泽塔-琼斯效应的论文,它非常有用:G Fond、A Gamanb、E Haffenb、P Llorca。"谷歌趋势:准备好实时预防自杀了吗?还是只是泽塔-琼斯效应?",《国际计算机网络与通信安全杂志》第3期,第1期(2015):1-5。