使用readHTMLTable处理多个tbody的方法

3
假设我有一个带有多个 <tbody> 的 HTML 表格,这是完全合法的 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来获取表格,也不太稳健。
1个回答

0
如果你查看readHTMLTable的源代码,getMethod(readHTMLTable, "XMLInternalElementNode")中包含了这行代码。
    if (length(tbody)) 
        node = tbody[[1]]

因此,它被有意地设计为仅选择第一个tbody的内容。此外,?readHTMLTable将该函数描述为提供从HTML文档中提取数据的相当强大的方法。

从HTML表格中提取数据的方法相当健壮

它被设计为实用函数。当它起作用时非常好,但您可能需要绕过它进行操作。


好的,但我希望文档提到了这种行为。 - Frank

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