我正在尝试阅读和html页面,其中包含如下表格:
url<-c("example.com/table")
页面内容如下:
<html> <head> <meta http-equiv="Refresh" content="60, cecutil2.cgi?V1P1"/> <style type="text/css"> th,td {font-size:12px; height:14px} table {border-collapse:collapse;} </style> </head> <body> <table width="100%" cols="6" border="2px">
<tr><td style="width:50px; text-align:center"><a href="zview.html" target="_blank" title="v1p1.mf.example.com:1024 (10.175.128.62)">V1P1</a></td><th width="55px">15/06/22</th><th width="40px">12:21</th>
<th width="65px">3B0F97-0</th><th style="width:50px">19.11%</th> <td align="left"><img height="100%" src="grnline.gif" width="19.10954%"></td></tr>
<tr><td colspan="3"></td>
<th width="65px">3B0F97-1</th><th style="width:50px">20.69%</th> <td align="left"><img height="100%" src="grnline.gif" width="20.68669%"></td></tr>
<tr><td colspan="3"></td>
<th width="65px">3B0F97-2</th><th style="width:50px">22.14%</th> <td align="left"><img height="100%" src="grnline.gif" width="22.13768%"></td></tr>
<tr><td colspan="3"></td>
<th width="65px">3B0F97-3</th><th style="width:50px">35.25%</th> <td align="left"><img height="100%" src="grnline.gif" width="35.24557%"></td></tr>
<tr><td colspan="3"></td>
<th width="65px">3B0F97-4</th><th style="width:50px">38.04%</th> <td align="left"><img height="100%" src="grnline.gif" width="38.03592%"></td></tr>
<tr><td colspan="3"></td>
<th width="65px">3B0F97-5</th><th style="width:50px">23.73%</th> <td align="left"><img height="100%" src="grnline.gif" width="23.73468%"></td></tr>
<tr><td colspan="3"></td>
<th width="65px"> Total </th><th style="width:50px">659.55%</th> <td align="left"><img height="100%" src="grnline.gif" width="32.977437%"></td></tr>
<tr><th colspan="6" align="center">Linux Nodes (z/VM-Guests)</th></tr> <tr><td/><td colspan="5"><table cols="3" width="100%" border="1px">
<tr><th width="50px"> <a href="http://jassadmin.nj.example.com/adminsvcs/jassgleprocess.jsp?search_criteria=jas1a419" target="_blank">jas1a419</a></th><th style="width:50px">121.58%</th> <td align="left"><img height="100%" src="redline.png" width="100%"></td></tr>
<tr><th width="50px"> <a href="http://jassadmin.nj.example.com/adminsvcs/jassgleprocess.jsp?search_criteria=jas1a443" target="_blank">jas1a443</a></th><th style="width:50px">45.07%</th> <td align="left"><img height="100%" src="grnline.gif" width="45.07199%"></td></tr>
<tr><th width="50px"> <a href="http://jassadmin.nj.example.com/adminsvcs/jassgleprocess.jsp?search_criteria=jas1a185" target="_blank">jas1a185</a></th><th style="width:50px">36.53%</th> <td align="left"><img height="100%" src="grnline.gif" width="36.52853%"></td></tr>
<tr><th width="50px"> <a href="http://jassadmin.nj.example.com/adminsvcs/jassgleprocess.jsp?search_criteria=jas1a435" target="_blank">jas1a435</a></th><th style="width:50px">23.19%</th> <td align="left"><img height="100%" src="grnline.gif" width="23.18803%"></td></tr>
</td></tr></table>
</table></body></html>
我需要能够将这些数据读入两个不同的数据帧。
第一个数据框应该有数据,直到文本显示为Linux节点,如下所示:
15/06/22 12:27 3B0F97-0 14.97%
15/06/22 12:27 3B0F97-1 16.10%
15/06/22 12:27 3B0F97-2 18.30%
15/06/22 12:27 3B0F97-3 39.23%
和
第二个数据帧应该包含以下Linux节点中的数据,其中包含与上述数据帧相同的时间帧。
15/06/22 12:27 jas1a419 121.58%
15/06/22 12:27 jas1a443 45.07%
15/06/22 12:27 jas1a185 36.53%
15/06/22 12:27 jas1a435 23.19%
当我这样做时:
suppressMessages(library(RCurl))
suppressMessages(library(XML))
data<-readHTMLTable(url)
我没有时间在排?任何想法,我如何修改它,以便我可以在其中获得两个不同的数据帧?
答案 0 :(得分:1)
您的HTML文件显然未明确包含您尝试检索的数据。我不是这方面的专家,但是日期和时间的信息可能是由HTML代码中调用的JavaServer Pages提供的。
无论如何,这就是你的表在浏览器中的显示方式:
好的,如果这是您的原始HTML文件,那么我建议如下:
library(rvest)
q <- html(url) %>% html_table(fill=T)
t2 <- as.data.frame(q[[2]][-3])
t1 <- as.data.frame(q[[1]])
ln_row <- as.numeric(row.names(t1[grep("Linux Nodes",t1[,1]),]))
t1 <- t1[-c((ln_row-1):nrow(t1)),-c(6:ncol(t1))]
t1[,2] <- t1[1,2] # fill the second column of table 1 with the date
t1[,3] <- t1[1,3] # fill the third column of table 1 with the time
t2[,3] <- t1[1,2] # copy date from table 1 into table 2
t2[,4] <- t1[1,3] # copy time from table 1 into table 2
t2 <- t2[c(3,4,1,2)] #reorder columns
#> t1
# X1 X2 X3 X4 X5
#1 V1P1 15/06/22 12:21 3B0F97-0 19.11%
#2 15/06/22 12:21 3B0F97-1 20.69%
#3 15/06/22 12:21 3B0F97-2 22.14%
#4 15/06/22 12:21 3B0F97-3 35.25%
#5 15/06/22 12:21 3B0F97-4 38.04%
#6 15/06/22 12:21 3B0F97-5 23.73%
#> t2
# V3 V4 X1 X2
#1 15/06/22 12:21 jas1a419 121.58%
#2 15/06/22 12:21 jas1a443 45.07%
#3 15/06/22 12:21 jas1a185 36.53%
#4 15/06/22 12:21 jas1a435 23.19%
希望这有帮助。
答案 1 :(得分:0)
尝试XML包,函数readHTMLTable()。如果您的(奇怪的)表格可能被读入data.frame,那么它将更容易选择您想要的内容。