Ruby Nokogiri解析HTML表格

4
我正在使用mechanize/nokogiri并需要解析以下HTML字符串。有人能帮我使用xpath语法或其他可行的方法来完成吗?
<table>
  <tr class="darkRow">
    <td>
      <span>
        <a href="?x=mSOWNEBYee31H0eV-V6JA0ZejXANJXLsttVxillWOFoykMg5U65P4x7FtTbsosKRbbBPuYvV8nPhET7b5sFeON4aWpbD10Dq">
            <span>4242YP</span>
        </a>
      </span>
    </td>
    <td>
      <span>Subject of Meeting</span>
    </td>
    <td>
      <span>
        <span>01:00 PM</span> 
        <span>Nov 11 2009</span> 
        <span>America/New_York</span>
      </span>
    </td>
    <td>
      <span>30</span>
    </td>
    <td>
      <span>
        <span>example@email.com</span>
      </span>
    </td>
    <td>
        <span>39243368</span>
    </td>
  </tr>
  .
  .
  .
  <more table rows with the same format>
</table>

我希望您能将此作为输出结果。
"4242YP","Subject of Meeting","01:00 PM Nov 11 2009 America/New_York","30","example@email.com", "39243368"
.
.
.
<however many rows exist in the html table>
2个回答

4

像这样的内容吗?

items=doc.xpath('//tr').map {|row| row.xpath('.//span/text()').select{|item| item.text.match(/\w+/)}.map {|item| item.text} }

返回: => [["4242YP", "会议主题", "下午 01:00", "2009年11月11日", "美国/纽约时区", "30", "example@email.com", "39243368"], ["abcdefg"]]

Select仅包括以单词字符开头的span(例如,排除一些span所包含的空格)。您可能需要根据您的具体情况细化“选择”筛选器。

我添加了一个包含abcdefg的最小行,以便您可以看到嵌套数组。


没有完全使用您的示例,但是它让我考虑了不同的做法。感谢您的帮助! - thomas
是的,我只能猜测您的HTML格式有多可预测,以及嵌套span的连接有多重要,因此想到您可以从一些最简单的东西开始工作。 - JasonTrue

0

如果您有XSL转换器,这是一部分用于转换输入的XSL:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
   <xsl:apply-templates select="//tr"/>
</xsl:template>

<xsl:template match="tr">
   "<xsl:value-of select="td/span/a/span"/>","<xsl:value-of select="td[position()=2]/span"/>","<xsl:value-of select="td[position()=3]/span/span[position()=1]"/>"
</xsl:template>

</xsl:stylesheet>

生成的输出如下:

"4242YP","Subject of Meeting","01:00 PM"
"4242YP","Subject of Meeting","01:00 PM"

(我复制了您的第一行表格。)

XSL选择位提供了您所需的XPATH输入的良好参考。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接