我正试图抓取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压缩。
答案 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