2016-08-03 42 views
1

我试图获取https://www.google.com/webmasters/tools/index-status?hl=en&authuser=0&siteUrl=xxx的源代码以获取由于某种原因未通过webmasters v3 API公开的索引状态编号。Ruby HTTP再次调用需要活动会话的站点

现在我不能只是做一个HTTParty.get(url)电话,因为这只会给我一个重定向到帐户登录页面(https://accounts.google.com/ServiceLogin?xxxxxx)。如果我运行HTTParty.get(url, {follow_redirects: false}),则会出现302错误,因为该页面无法将我重定向到Google的登录页面。

基本上问题是:是否有可能采取我现有的登录cookie并提供给脚本或让脚本“登录”然后存储会话cookie?

后半部分将主要包括:

  • 获取来电https://accounts.google.com
  • POST提交登录表单
  • 等待响应,保存Cookie
  • 使用该会话去上面搜索控制台URL
+0

请阅读“[问]”和链接的页面。如果您遇到代码问题,请阅读“[mcve]”。我们需要更好地描述问题。我们需要更好地理解你是如何做到这一点的。你看过使用[Mechanize](https://github.com/sparklemotion/mechanize)吗?它旨在帮助浏览网站并为您处理饼干。 –

+0

谢谢。随着机械化我能够得到我的谷歌会话,并刮去我需要的网站。 – Killerpixler

回答

0

积分为@the-tin-man暗示mechanize。对于别人看如何获得你需要的任何服务的有效谷歌会话:

agent = Mechanize.new 
login_page = agent.get("https://accounts.google.com") 
login_form1 = login_page.form 
login_form1.Email = "your_google_email_here" 
login_form2 = login_form1.click_button 
login_form2.form.Passwd = "your_google_password" 
login_form2.form.click_button 
#at this point you have a valid google session so the next part is specific for my needs 
search_console_page = agent.get("https://www.google.com/webmasters/tools/index-status?hl=en&authuser=0&siteUrl=xxx") 
total_indexed = search_console_page.search("td.property div.primary").inner_html.gsub(',', '').to_i 

现在我只需要弄清楚如何存储的cookie永久的地方,所以我不必每次登录我使用时间它。

+0

YAML是一个很好的候选格式。只需将信息存储在与源代码相关的文件中即可。 [YAML](http://ruby-doc.org/stdlib-2.3.1/libdoc/yaml/rdoc/YAML.html)类易于使用,并附带Ruby。有很多在SO上使用它的例子。基于磁盘的SQLite数据库更安全一些,如果你想让窥探者不容易看到它。 [Sequel](http://sequel.jeremyevans.net/rdoc/files/README_rdoc.html#label-Getting+Started)可以让你轻松。如果你更偏执,你可以对它进行加密并对其进行解密,但如果源代码可用,那将浪费时间。 –

+0

如果谷歌有一个关联的API,无论你想要抓取什么,你最好使用它。刮擦是最后一次尝试,更容易失败。 –

+0

正如我所提到的,这个特定的数据点不是API的一部分,所以我不得不求助于刮擦。感谢YAML小费,我会研究这一点。 – Killerpixler

0

是的,可以使用您的cookie并发送它。这就是浏览器的工作原理。

Wikipedia

GET /spec.html HTTP/1.1 
Host: www.example.org 
Cookie: theme=light; sessionToken=abc123 
… 

这需要一些工作来弄清楚到底是怎么回事。我建议查看浏览器上的网络选项卡以查看每个HTTP请求。