我正在尝试使用open uri+hpricot解析一个网页,但在解析过程中似乎出现了问题,因为gems没有给我带来我想要的东西。
具体来说,我想在这个url中得到这个div(其id是'pasajes'):
http://www.despegar.com.ar
我写这段代码:
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都试过很多东西:
我试着给出那个div的绝对路径
我尝试使用带有选择器的css路径
我尝试使用hpricot搜索快捷方式(doc//“div pasajes”)
几乎所有可能到达“pasajes”分区的相对路径
最后我找到了一个可怕的解决办法。我使用了watir库,在打开web浏览器之后,我将html传递给了hpricot。这样hpricot就可以识别“pasajes”div了,但我不想只打开一个用于解析的web浏览器……
我做错什么了?开放uri工作不好吗?是希普里科吗?
最佳答案
静态html页面中没有id为pasajes的div。如果你正在运行*nix,你可以通过执行以下操作看到:
curl http://www.despegar.com.ar/ | grep pasajes
我猜是javascript生成的。
如果你正在使用macruby,你可以尝试Lyndon。
关于ruby - open-uri + hpricot和nokogiri无法正确解析html,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1357740/