我正在尝试使用open-uri + hpricot解析一个网页,但这似乎是解析过程中的一个问题,因为宝石没有给我带来我想要的东西。
具体来说,我希望在此网址中获得 div (其ID为'pasajes'):
我写这段代码:
require 'nokogiri'
require 'hpricot'
require 'open-uri'
document = Hpricot(open('http://www.despegar.com.ar/')) # WITH HPRICOT
document2 = Nokogiri::HTML(open('http://www.despegar.com.ar/')) # WITH NOKOGIRI
pasajes = document.search("//div[@id='pasajes']")
pasajes2 = document2.xpath("//div[@id='pasajes']")
但它带来了什么!我在hpricot和nokogiri都尝试过很多东西:
最后我发现了一个可怕的解决方案。我使用了watir库,打开网页浏览器之后,我已经将html传递给了hpricot。通过这种方式hpricot DO RECOGNIZE'pasajes'div。但我不想只是为了解析而打开一个web-browsere ...
我做错了什么? open-uri工作不好吗?是hpricot吗?
答案 0 :(得分:4)
静态HTML页面中没有带有id pasajes的DIV。如果你正在运行* nix,你可以看到:
curl http://www.despegar.com.ar/ | grep pasajes
我的猜测是它是由JavaScript生成的。
如果您使用的是MacRuby,可以试试Lyndon。
答案 1 :(得分:3)
该页面中没有id为'pasajes'的div。这就是问题所在。
答案 2 :(得分:1)
这更像是对Jonas上面回答的补充评论,而不仅仅是答案......但我是SO的新手,还没有“评论能力”:)
您可以使用Selenium RC下载完整的HTML,然后在下载的文件上使用nokogiri。请注意,这仅在Javascript生成/修改内容时才有效。如果网页依赖于cookie来设置内容,那么您的选择将是Selenium(在浏览器中)或watir,如您所注意到的。
我很想听到一个更好的解决方案(想用nokogiri解析网页,但页面由JS修改)。
答案 3 :(得分:1)
我遇到了与Nokogiri类似的问题,但是在OS X 10.5上。但是,我首先尝试使用open-uri来打开有大量HTML div的页面,无论如何。我发现使用:
urldoc = open('http://hivelogic.com/articles/using_usr_local')
urldoc.readlines{|line| puts line}
我会看到很多精彩的HTML。我还通过将“文件”读入字符串并将其传递给Nokogiri我发现我可以正常工作。我甚至不得不修改他们在rubyforge上使用的演示来教你Nokogiri。
使用他们自己的例子我得到了这个:
>> doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))
=> <!DOCTYPE html>
>> doc.children
=>
YUCK!
如果我调整将url读入字符串,我会得到很好的东西:
>> doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove').read)
=> <!DOCTYPE html>
<html>
<head>
..... TONS OF HTML HERE ........
</div>
</body>
</html>
注意强> 当我使用irb来玩时,我确实看到了这个可爱的警告:
HI。您正在使用已超过4年的libxml2版本2.6.16 很多错误。我们建议您最大限度地提高HTML / XML解析的乐趣 升级您的libxml2版本并重新安装nokogiri。如果你喜欢使用 libxml2版本2.6.16,但不喜欢这个警告,请定义常量 在要求nokogiri之前的I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2。
但是我没有心情去处理在/ usr / local blah blah中修复libxml的恐怖和各种专家但有矛盾的建议。 link text上的帖子对它有一个很好的解释,但是另一个* nix向导用一些声音警告和关注来攻击这个概念。所以我说,“没办法”。
为什么要写这个?因为IMO我认为我的Nokogiri蓝调和libxml警告之间可能存在联系。 OS X 10.5是旧的东西,他们可能有问题。
<强>问题强>
其他OS X 10.5用户是否与Nokogiri有此问题?