2016-09-21 84 views
1

我试图拉从pgatour.com使用Ruby脚本的一些历史数据,但我似乎无法得到它拉任何数据。红宝石,引入nokogiri,XPath和pgatour.com

我知道这之前已经讨论过,但我试过,我已经遇到和即将空白的所有解决方案,所以现在我一切都剥离到最基础的东西我能想到的尝试找出它是我还是网站。

我现在只是想抓住一个表中的一个元素,然后将其打印到控制台

要获得的XPath,我打开了Chrome开发者工具,发现在表中的分数,并右键单击以复制XPath,然后只用直接在代码中,但还是什么也没得到

require 'open-uri' 
require 'nokogiri' 

url = "http://www.pgatour.com/tournaments/safeway-open/past-results.html" 
html = open(url) 
doc = Nokogiri::HTML(html) 
puts doc.xpath('//*[@id="pastResultsData"]/ul/li[1]/table/tbody/tr[2]/td[5]').text 

难道我做错了什么?还是网站结构化,以便像我以上所做的简单的解决方案将无法正常工作?

+0

规则#1:不要依赖于浏览器或嵌入在浏览器中找到选择,或HTML甚至布局的工具的输出。浏览器混淆了HTML。相反,可以在命令行使用'wget','curl'或'nokogiri',然后在那里查看,看看Nokogiri看到的是什么。赔率非常好,涉及DHTML,所以你想要的不是在页面中,直到JavaScript解释器加载它。 –

回答

0

这是真的重要的是首先看是否HTML是静态的还是动态的。有很多方法可以做到这一点,但一个非常简单的测试是在命令行中使用引入nokogiri:

>nokogiri 'http://www.pgatour.com/tournaments/safeway-open/past-results.html' 
Your document is stored in @doc... 
Welcome to NOKOGIRI. You are using ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]. Have fun ;) 
>> @doc.at('#pastResultsData') 
<div id="pastResultsData" class="clearfix module-tournament-past-results"/> 

寻找#pastResultsData会发现该ID的任何标记。返回的值显示<div>标记为空,这通常意味着它正在等待被用作稍后由DHTML填充的容器。

而且,在这一点上引入nokogiri不能帮你,你要么需要检索内容,然后解析,或使用一些解析的JavaScript。

+0

谢谢,这是非常有帮助的 –