RestClient没有获取整个网页

时间:2014-11-10 14:33:07

标签: ruby web-scraping nokogiri screen-scraping rest-client

我正试图抓取http://rbi.org.in/home.aspx来获取汇率。

这是我的代码:

require 'rubygems'
require 'nokogiri'
require 'restclient'
require 'json'

page = Nokogiri::HTML(RestClient.get("http://www.rbi.org.in/home.aspx"))
puts page.inspect

我没有获得任何<table><span>标记。我得到的只是:

<html>
<HEAD>
    <title>Reserve Bank of India - India's Central Bank</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>

<body>
<form name="ctl00" method="post" action="default.aspx" id="ctl00">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTY4NTY4ODMwOGRksjUIop3c9mHB1LiOzxhiEe+9uY0=" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['ctl00'];
if (!theForm) {
    theForm = document.ctl00;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


<div>

    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="CA0B0334" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwKzlrSzDgLtyMXRBgK++un9Ay2/rximKfZSRpQMBtYFf8ro5dRB" />
</div>
    <a id="lbtnSubmit" href="javascript:__doPostBack('lbtnSubmit','')"></a>
    <input name="txtResolution" type="hidden" id="txtResolution" />
</form>
<script language='javascript'>
document.getElementById("txtResolution").value="1024";
function goToHome()
{
    if ( (screen.width >= 1024) && (screen.height >= 768) )
    {
        document.getElementById("txtResolution").value="1024";
    }
    else
    {
        document.getElementById("txtResolution").value="800";
    }
    __doPostBack('lbtnSubmit','');
}
goToHome();
</script>
</body>
</html>

如何获取整个页面来源并解析汇率?我查阅了所有Nokogiri教程,但他们没有任何帮助。此外,我不认为这个页面是gzip压缩。

3 个答案:

答案 0 :(得分:0)

为什么不使用OpenURI代替RestClient?

require 'nokogiri'
require 'open-uri'

r = Nokogiri::HTML(open("http://www.rbi.org.in/home.aspx"))

p r.inspect

答案 1 :(得分:0)

看起来该网站使用JavaScript将用户重定向到为用户创建会话的页面。

您未被重定向的原因是因为RestClient不评估JavaScript。

答案 2 :(得分:0)

你可以用JavaScript抓住Capybara的页面。

这些是gem依赖项:

gem 'capybara'
gem 'selenium-webdriver'

和预装的Firefox二进制文件。

require 'capybara'

session = Capybara::Session.new(:selenium)
session.visit "http://rbi.org.in/home.aspx"

puts session.body