У меня есть этот html файл
<html>
<table width="111" >
<tr> <td> A </td>
<td> B </td>
</tr>
<tr> <td> C </td>
<td> D </td>
</tr>
</table>
<table width="222" >
<tr> <td> E </td>
<td> F </td>
</tr>
<tr> <td> G </td>
<td> H </td>
</tr>
</table>
</html>
И в R
я делаю
library(XML)
tree = htmlTreeParse(file, useInternal=TRUE, asTree=TRUE)
table = getNodeSet(tree, "//table[@width='222']")[[1]]
xpathSApply(table, "//td", xmlValue)
И я получаю
[1] " A " " B " " C " " D " " E " " F " " G " " H "
в то время как я
[1] " E " " F " " G " " H "
Я не понимаю, что происходит
Просто сделайте это так:
# Load libraries
library(XML)
# Load data
base_html <- "<html><table width='111'><tr><td>A</td><td>B</td></tr><tr><td>C</td><td>D</td></tr></table><table width='222'><tr><td>E</td><td>F</td></tr><tr><td>G</td><td>H</td></tr></table></html>"
# Parse HTML
tree <- htmlTreeParse(base_html, useInternal=TRUE, asTree=TRUE)
# Get data
xpathSApply(tree, "//table[@width='222']/tr/td", xmlValue)
Используя ваш текущий метод, вы можете получить значения с этим. Кстати, вы можете не захотеть присвоить table
имен чему-либо, так как это базовая функция R и может вызвать проблемы в строке. Нет необходимости в Rcurl
.
> library(XML)
> doc <- '<html>
<table width="111" >
<tr> <td> A </td>
<td> B </td>
</tr>
<tr> <td> C </td>
<td> D </td>
</tr>
</table>
<table width="222" >
<tr> <td> E </td>
<td> F </td>
</tr>
<tr> <td> G </td>
<td> H </td>
</tr>
</table>
</html>'
> tree <- htmlTreeParse(doc, useInternal = TRUE, asTree = TRUE)
> tab <- getNodeSet(tree, "//table[@ width='222']")[[1]]
> xpathSApply(tab, "//table[@width='222']/tr/td", xmlValue)
[1] " E " " F " " G " " H "
В качестве альтернативы вы можете сделать
> tab2 <- getNodeSet(tree, "//table")[[2]]
> xpathSApply(tab2, "//table[@width='222']/tr/td", xmlValue)
[1] " E " " F " " G " " H "
tree
видеtable.temp
и (iii) есть понимание того, почему то, что я делаю, не работает? Благодарю.