假设我有一个带有多个<tbody>的HTML表,它we know is perfectly legal 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)

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

最佳答案

如果您查看readHTMLTablegetMethod(readHTMLTable, "XMLInternalElementNode")的源代码,它包含

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

因此,它的目的是只选择第一个tbody的内容。同时?readHTMLTable还将功能描述为
从HTML文档中的HTML表提取数据的一些健壮方法
它被设计成一个实用功能。它很好的时候,它的工作,但你可能需要黑客左右。

09-03 18:22