假设我有一个带有多个<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
来获得这样的表,而且感觉也不是很健壮。 最佳答案
如果您查看readHTMLTable
getMethod(readHTMLTable, "XMLInternalElementNode")
的源代码,它包含
if (length(tbody))
node = tbody[[1]]
因此,它的目的是只选择第一个tbody的内容。同时
?readHTMLTable
还将功能描述为从HTML文档中的HTML表提取数据的一些健壮方法
它被设计成一个实用功能。它很好的时候,它的工作,但你可能需要黑客左右。