3

假设我有一个包含多个 的 HTML 表<tbody>我们知道它是完全合法的 HTML,并尝试readHTMLTable按如下方式读取它:

library(XML)
table.text <- '<table>
  <thead>
    <tr><th>Col1</th><th>Col2</th>
  </thead>
  <tbody>
    <tr><td>1a</td><td>2a</td></tr>
  </tbody>
  <tbody>
    <tr><td>1b</td><td>2b</td></tr>
  </tbody>
</table>'
readHTMLTable(table.text)

我得到的输出只包含第一个<tbody>元素:

$`NULL`
  Col1 Col2
1   1a   2a

并忽略其余部分。这是预期的行为吗?(我在文档中找不到任何提及。)访问整个表的最灵活和最可靠的方法是什么?

我目前正在使用

table.text <- gsub('</tbody>[[:space:]]*<tbody>', '', table.text)
readHTMLTable(table.text)

这使我无法readHTMLTable直接在 URL 上使用来获取这样的表格,而且感觉也不是很健壮。

4

1 回答 1

0

如果您查看它的来源,readHTMLTable getMethod(readHTMLTable, "XMLInternalElementNode")它包含该行

    if (length(tbody)) 
        node = tbody[[1]]

所以它被有意设计为只选择第一个 tbody 的内容。还将?readHTMLTable功能描述为提供

从 HTML 文档中的 HTML 表格中提取数据的一些稳健的方法

它被设计为实用功能。它在工作时很棒,但你可能需要绕过它。

于 2013-08-20T08:07:29.243 回答