假设我有一个包含多个 <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)
这会阻止我使用 readHTMLTable
直接在 URL 上获取这样的表格,而且感觉不是很健壮。
最佳答案
如果您查看 readHTMLTable
getMethod(readHTMLTable, "XMLInternalElementNode")
的源代码,它包含行
if (length(tbody))
node = tbody[[1]]
所以特意设计成只选取第一个tbody的内容。此外,?readHTMLTable
将函数描述为提供
somewhat robust methods for extracting data from HTML tables in an HTML document
它被设计成一个效用函数。它在工作时很棒,但您可能需要绕过它。
关于html - 将 readHTMLTable 与多个 tbody 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18329325/