2015-06-22 4 views
0

Я пытаюсь читать и HTML-страницу, которая имеет таблицу, как это:Как вы читаете HTML таблицу в R

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

Просьба указать ссылку. – user227710

+0

@ user227710, я не могу предоставить ссылку, это внутренний сайт. это html-страница, когда я вызываю URL-адрес. – user1471980

ответ

1

Ваш HTML-файл, по-видимому, не содержит явно данные, которые вы пытаетесь получить. Я не эксперт в этом, но, возможно, информация о датах и ​​времени предоставляется страницами JavaServer, вызываемыми из HTML-кода.

В любом случае, это то, как ваша таблица выглядит в браузере:

This is how the HTML table looks like without the the jsp data

OK, если это ваш оригинальный 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% 

Надеюсь это поможет.

+0

Да, это таблица, и мне нужно преобразовать ее в два разных кадра данных сверху и снизу. – user1471980

+0

спасибо, один быстрый вопрос. Я знаю, что вы используете page.html локально. Что делать, если вы должны сделать URL? – user1471980

+1

Вы можете просто использовать 'url <-" http://where.my.fileis.com/table.html ", то есть поместить весь URL в кавычки и назначить его в качестве символьной строки переменной' url' в примере. – RHertel

0

Попробуйте пакет XML, функцию readHTMLTable(). Если ваша (странная) таблица может быть прочитана в data.frame, тогда будет легче выбрать, что вы хотите.