【问题标题】:Ruby - nokogiri - parse only specific html tableRuby - nokogiri - 仅解析特定的 html 表
【发布时间】:2012-04-14 06:58:22
【问题描述】:

我有一个 HTML 文档来解析并从那里读取一堆东西。问题是 html 中有多个表,我只对一个表感兴趣。另外,我只想阅读具有一些有用内容的行。这是示例 html 页面,有两个没有 ID 的表,我只想要第二个表和对人类有用的行。

<HTML>
<BODY>

<TABLE>
  <TR>
    <TD> I don't want this table </TD></TR>
  <TR>
    <TD></TD>
    <TD> No No No <br></TD>
  </TR>
....
</TABLE>


<TABLE>
  <TR>
    <TD>04/13/2012 22:51  I want this table </TD></TR>
  <TR>
    <TD></TD>
    <TD> First - something there <br></TD>
  </TR>
  <TR>
    <TD>04/13/2012 23:23  Update from xyz</TD></TR>
  <TR>
    <TD></TD>
    <TD>Second - something here <br></TD>
  </TR>
</TABLE>


</BODY>
</HTML>

我正在尝试这段代码,这显然是行不通的。 o/p 不是我想要的文本。它包括两个表,我只想要第二个表。帮忙!

require 'curb'
require 'nokogiri'
c = Curl::Easy.perform("http://server/cgi-bin/page.cgi?id=123456")
html_doc = Nokogiri::HTML(c.body_str.to_s)
puts html_doc.xpath("//table/tr/td")

【问题讨论】:

  • 知道了! require 'curb' require 'nokogiri' c = Curl::Easy.perform("http://server/cgi-bin/page.cgi?id=123456") html_doc = Nokogiri::HTML(c.body_str.to_s) puts html_doc.xpath("//table[2]/tr/td/text()")

标签: ruby nokogiri


【解决方案1】:

您是否尝试过//table[2]/tr/td 的xpath 来获取第二个表。如果您可以更改 HTML 的来源,最好的解决方案是为您的表格提供 id 属性。

【讨论】:

  • 谢谢。 html_doc.xpath("//table[2]/tr/td/text()" 让它工作。但是我如何从表格中获取单独的行?我希望这些东西通过页面 \r 或 \n 进入 mysql。
  • 添加到mysql之前如何维护换行符?
  • 您可以在 nokogiri 节点上调用 inner_html() 而不是调用 text(),它只会为您提供内部的原始文本。不过,您必须在每个 td 元素上调用 inner_html。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 2013-04-02
  • 2013-09-24
  • 2021-01-20
相关资源
最近更新 更多