Ruby 打开uri+;hpricot&;nokogiri don';无法正确解析html
我正在尝试使用openuri+hpricot解析一个网页,但在解析过程中似乎出现了问题,因为gems没有给我带来我想要的东西 具体来说,我想在这个url中获取这个div(其id是'pasajes'): 我写这段代码:Ruby 打开uri+;hpricot&;nokogiri don';无法正确解析html,ruby,parsing,nokogiri,watir,open-uri,Ruby,Parsing,Nokogiri,Watir,Open Uri,我正在尝试使用openuri+hpricot解析一个网页,但在解析过程中似乎出现了问题,因为gems没有给我带来我想要的东西 具体来说,我想在这个url中获取这个div(其id是'pasajes'): 我写这段代码: require 'nokogiri' require 'hpricot' require 'open-uri' document = Hpricot(open('http://www.despegar.com.ar/')) # WITH HPRICOT document2 =
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中尝试了很多东西:
我做错了什么?开放uri工作不好吗?是hpricot吗?该页面中没有id为“pasajes”的div。这就是问题所在。静态HTML页面中没有id为pasajes的DIV。如果您正在运行*nix,您可以通过执行以下操作看到:
curl http://www.despegar.com.ar/ | grep pasajes
我猜它是由JavaScript生成的
如果你正在使用MacRuby,你可以试试。这更适合作为对乔纳斯上述答案的补充评论,而不是答案本身。。。但我对SO还不熟悉,还没有“评论权”: 您可以使用Selenium RC下载完整的HTML,然后在下载的文件上使用nokogiri。注意,只有当内容由Javascript生成/修改时,这才有效。如果网页依赖cookies来设置内容,您可以选择Selenium(在浏览器中)或watir(如您所述)
我很想听到一个更好的解决方案(想用nokogiri解析网页,但页面是由JS修改的) 我在Nokogiri上遇到了类似的问题,但是在OS X 10.5上。然而,我首先尝试打开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
=>
doc=Nokogiri::HTML(打开http://www.google.com/search?q=tenderlove'))
=>
>>儿童医生
=>
恶心
如果我将url读入字符串,我会得到一些好东西:
>> doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove').read)
=> <!DOCTYPE html>
<html>
<head>
..... TONS OF HTML HERE ........
</div>
</body>
</html>
doc=Nokogiri::HTML(打开http://www.google.com/search?q=tenderlove)。阅读)
=>
..... 这里有大量的HTML。。。。。。。。
注意
当我使用irb播放时,我确实看到了这个可爱的警告:
嗨。您使用的是libxml2版本2.6.16,该版本已有4年历史,并且
很多虫子。我们建议,为了获得最大的HTML/XML解析乐趣,您可以
升级您的libxml2版本并重新安装nokogiri。如果你喜欢使用
libxml2版本2.6.16,但不喜欢此警告,请定义常量
在要求nokogiri之前,我知道我正在使用旧版和小车版的LIBXML2
但我没有心情去处理这些恐怖事件和各种专家的建议,但却与在/usr/local中修复libxml的建议相矛盾。一篇博文对此有很好的解释,但是另一个*nix向导用一些合理的警告和担忧来攻击这个概念。所以我说,“不可能”
我为什么要写这个?因为在我看来,我的Nokogiri忧郁和libxml警告之间可能有联系。OSX10.5是旧版本的,他们可能会有问题
问题
是否有其他OS X 10.5用户对Nokogiri有此问题?啊,这可能就是问题所在。不管怎么说,要解析它吗?或者瓦蒂尔将是我唯一的选择?谢谢,我不是在跑步。我使用的是windows xp。使用firebug或ie开发者工具栏或在firefox中使用“查看源代码可以”我可以看到“pasajes”div。为什么你说没有div“pasajes”div?在静态页面中没有div,它是用JavaScript放在那里的。我开始对此感到不安。您能解释一下为什么要监控despegars的报价吗?我怎么能看到没有id为“pasajes”的div。查看源代码时,我可以找到具有该id的div。我不明白您为什么说该div不存在。。。谢谢如果我尝试使用firefox查看源代码,它没有具有该id的div。div在哪一行?好的,我设法让它显示出来。该网站根据一些cookie/国家/事物修改其内容。这就是为什么它可能会在浏览器中显示,但不会在python中显示。您可以尝试跟踪导致修改内容的原因,然后配置脚本以重复它。这可能是一些cookie,下面是关于如何将cookie与python和http结合使用的说明。