Ruby 在Nokogiri中使用XPath获取HTML表值?
我试图使用此表的XPath从表中获取一些值,但它只返回Ruby 在Nokogiri中使用XPath获取HTML表值?,ruby,xpath,web-scraping,nokogiri,Ruby,Xpath,Web Scraping,Nokogiri,我试图使用此表的XPath从表中获取一些值,但它只返回[](空): 我使用Firebug找到了表的XPath,所以我认为它是正确的 有人能帮我吗?从XPath中删除tbody/ tbody标记是table标记的HTML规范的一部分,但很少在HTML中实际实现。有些浏览器会插入它,尽管它不在页面的HTML中。然后萤火虫看到了它,你们看到了,并且认为它一定是这样 即使使用“查看源代码”也会让你感到困惑,因为你希望这是准确的,但浏览器已经将内容包含在“tbody”中,所以,好吧,基本上他们在骗你 您可
[]
(空):
我使用Firebug找到了表的XPath,所以我认为它是正确的
有人能帮我吗?从XPath中删除
tbody/
tbody
标记是table
标记的HTML规范的一部分,但很少在HTML中实际实现。有些浏览器会插入它,尽管它不在页面的HTML中。然后萤火虫看到了它,你们看到了,并且认为它一定是这样
即使使用“查看源代码”也会让你感到困惑,因为你希望这是准确的,但浏览器已经将内容包含在“tbody”中,所以,好吧,基本上他们在骗你
您可以通过查看Nokogiri获得的HTML来确认这一点。使用将doc.放到html['tbody']
中,然后查看是否得到的“tbody”
或零
…因为在html文件中,它们都是指定的(由程序员编写)
如果您确定它们实际上属于那里,因为它们存在于HTML源代码中,那么您需要分解XPath。从一条宽阔的道路开始,然后慢慢添加到其中以缩小搜索范围
我现在无法访问服务器,因此我无法确认这一点,也无法深入研究层次结构应该是什么,并给出一个示例。(这就是为什么在你的问题中给我们真正的HTML比一个可能不起作用的链接要好得多。)
另一种方法是使用XPath的/
(搜索任意位置)和限制较少的路径,或者CSS选择器。不管是哪种方式,都要检查HTML,而不是依赖Firebug的XPath,并确定可以在源代码中使用哪些“地标”来导航到所需的表。今天的HTML充满了id
和class
参数,或者一系列特定的标记,它们可以作为所需表格的指纹。搜索固定该表所需的最小值
如果该表类似于
,则使用doc.at('table#foo')
。如果它位于
中,请使用doc.at('div.bar table')
。在任何情况下,使用完成任务所需的最小大小的访问器。如果HTML中的任何内容将来发生更改,这将增加成功的机会。从XPath中删除tbody/
tbody
标记是table
标记的HTML规范的一部分,但很少在HTML中实际实现。有些浏览器会插入它,尽管它不在页面的HTML中。然后萤火虫看到了它,你们看到了,并且认为它一定是这样
即使使用“查看源代码”也会让你感到困惑,因为你希望这是准确的,但浏览器已经将内容包含在“tbody”中,所以,好吧,基本上他们在骗你
您可以通过查看Nokogiri获得的HTML来确认这一点。使用将doc.放到html['tbody']
中,然后查看是否得到的“tbody”
或零
…因为在html文件中,它们都是指定的(由程序员编写)
如果您确定它们实际上属于那里,因为它们存在于HTML源代码中,那么您需要分解XPath。从一条宽阔的道路开始,然后慢慢添加到其中以缩小搜索范围
我现在无法访问服务器,因此我无法确认这一点,也无法深入研究层次结构应该是什么,并给出一个示例。(这就是为什么在你的问题中给我们真正的HTML比一个可能不起作用的链接要好得多。)
另一种方法是使用XPath的/
(搜索任意位置)和限制较少的路径,或者CSS选择器。不管是哪种方式,都要检查HTML,而不是依赖Firebug的XPath,并确定可以在源代码中使用哪些“地标”来导航到所需的表。今天的HTML充满了id
和class
参数,或者一系列特定的标记,它们可以作为所需表格的指纹。搜索固定该表所需的最小值
如果该表类似于
,则使用doc.at('table#foo')
。如果它位于
中,请使用doc.at('div.bar table')
。在任何情况下,使用完成任务所需的最小大小的访问器。如果HTML中的任何内容在将来发生更改,这将增加您成功的机会。所有这些内容?因为在html文件中,它们都是指定的(由程序员编写的)。您的表#foo
和“div.bar表”
很有趣。你能给我一个能看到这么多速记图片的来源吗?这些都是标准的CSS访问器。Nokogiri支持与jQuery兼容的XPath和CSS访问器。我喜欢CSS,因为它通常更可读;我认为XPath可以做得更多,但在我看来,它也更难阅读,所以我会根据需要来回调整。所有这些?因为在html文件中,它们都是指定的(由程序员编写的)。您的表#foo
和“div.bar表”
很有趣。你能给我一个能看到这么多速记图片的来源吗?这些都是标准的CSS访问器。Nokogiri支持与jQuery兼容的XPath和CSS访问器。我喜欢CSS,因为它通常更可读;我认为XPath能够做得更多,但在我看来,它也更难阅读,所以我会根据需要来回调整。
require 'nokogiri'
require 'open-uri'
url = "http://riopretrans.com.br/linhas.php?ln=106"
doc = Nokogiri::HTML(open(url))
doc.xpath("html/body/table[1]/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[2]/td/div/table[1]/tbody/tr[3]/td/div/div/center/font/table").each do |lines|
puts lines.content
end