【问题标题】:Parsing HTML document解析 HTML 文档
【发布时间】:2015-06-11 15:59:07
【问题描述】:

我正在尝试使用 Ruby 和 Nokogiri 解析以下 HTML:

<div class="vevent">
<table width="750"><tr>
<td width="25"> </td>
<td valign="top" width="200">
<font size="2" face="sans-serif">
<font color="black"><b>June 30, 2015</b></font>
<br>
<span class="dtstart"><span class="value-title" title="2015-06-30"></span></span><br><span class="summary"><font color="#92161" size="3"><b>Band Concert</b></font></span>
<br><font color="#333333">Event</font><br>
<br>
<br>
<br clear="left">Have a question? email us.<br>
<br></font>
</td>
<td valign="top" width="10"></td>
<td valign="top">
<br clear="left"><font color="#92161">111 Main Street</font><br>
<font color="#92161">Mainstreet, Ohio 55111</font>
<a rel="nofollow" href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=%221700+111+MainStreet+NE+Mainstreet,+Ohio+55111%22" target="_blank"><font size="1" face="sans-serif">map link</font></a><br><br>
<font color="#92161"><font size="2" face="sans-serif">Telephone:</font> 3305551000</font><br><br>
Visit our website for complete information.<br><br>
Enjoy a summer evening concert on Main Street at 8pm. Doors and cash bar open at 7pm.<br><br>Look for more details and ticket sales to be released soon on our website<br>  <br><br>
<br>
</td>
</tr></table>
</div>

我正在尝试抓取最后一段文字:

Visit our website for complete information.<br><br>
Enjoy a summer evening concert on Main Street at 8pm. Doors and cash bar open at 7pm.<br><br>Look for more details and ticket sales to be released soon on our website<br>  <br><br>

到目前为止,这是我的代码:

events = doc.css("div.vevent")
events.collect do |row|
  row.css("td")[3]  
end

这将使我进入第三个 td,其中包含我要查找的文本,如下所示:

<td valign="top">
<br clear="left"><font color="#92161">111 Main Street</font><br>
<font color="#92161">Mainstreet, Ohio 55111</font>
<a rel="nofollow" href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=%221700+111+MainStreet+NE+Mainstreet,+Ohio+55111%22" target="_blank"><font size="1" face="sans-serif">map link</font></a><br><br>
<font color="#92161"><font size="2" face="sans-serif">Telephone:</font> 3305551000</font><br><br>
Visit our website for complete information.<br><br>
Enjoy a summer evening concert on Main Street at 8pm. Doors and cash bar open at 7pm.<br><br>Look for more details and ticket sales to be released soon on our website<br>  <br><br>
<br>
</td>

但是,如果我在那个 td 上调用 text,我会得到 td 内的所有文本。我只想要不在任何元素内的最后一点。我尝试使用 XPath 和 parent,这样我就可以说“只给我 td 内的文本(而不是嵌套在另一个元素内)”,但我无法让它工作。有人对此有任何想法吗?

【问题讨论】:

    标签: ruby nokogiri


    【解决方案1】:

    试试这个代码:doc.css('td')[3].css('&gt; text()').to_s.strip

    【讨论】:

    • 不要乱扔代码。解释为什么 OP 想要使用它。给他们一点代码就相当于给他们一条鱼。解释它就等于解释如何钓鱼。从长远来看,后者更有用。
    • 这是正确的答案。关于 ('> text()') 的部分仅指示 td 内的文本(不是嵌套元素)是我需要的。我确实更新了一点。我使用的是 row 而不是 doc,因为我正在迭代一堆记录。感谢您的帮助。
    • 铁皮人,我同意,但我看代码就明白了。我确实认为向其他可能在以后遇到此问题的人解释它会有所帮助。
    • 这正是重点。答案不仅针对一个问题或一张海报,还针对任何提出类似问题的人,这就是我们标记重复答案的原因,以将人们指向一个问题及其答案。好的答案不仅包含代码,还包含有教育意义的解释。
    【解决方案2】:

    我建议使用更灵活的xpath。 如果我理解正确,您会希望:

    我只想要不在任何元素内的最后一点

    所以,试试这个 XPath:

    //table//td[last()]/text()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-04
      • 2015-12-10
      • 2019-07-03
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      相关资源
      最近更新 更多