2016-08-01 53 views
0

我有一個程序的HTML表格輸出,它將單元格內的值與<br>分開。我嘗試過使用XML::readHTMLTablehtmltab,但他們一起貶低沒有任何分隔符的值。我需要用逗號分隔,但我沒有看到這些函數的任何論點來解釋這一點。我已經發布了一個僞文件的例子。目前它讀入兩個載體c("ABC","DEF","GHI")c("JKLMNO","PQR","STU"),但我需要"JKLMNO"元素來代替"JKL,MNO"如何讀取HTML表格並計算單元格內的換行符

<table> 
    <tr> 
    <td> 
     ABC<br/> 
    </td> 
    <td> 
     DEF<br/> 
    </td> 
    <td> 
     GHI<br/> 
    </td> 
    </tr> 
    <tr> 
    <td> 
     JKL<br/> 
     MNO<br/> 
    </td> 
    <td> 
     PQR<br/> 
    </td> 
    <td> 
     STU<br/ 
    </td> 
    </tr> 
</table> 
+0

可能的重複..http://stackoverflow.com/questions/1395528/scraping-html-tables-into-r-data-frames-using-the-xml-package – user5249203

回答

0
library(rvest) 
library(dplyr) 

doc <- read_html("<table> 
    <tr> 
    <td> 
     ABC<br/> 
    </td> 
    <td> 
     DEF<br/> 
    </td> 
    <td> 
     GHI<br/> 
    </td> 
    </tr> 
    <tr> 
    <td> 
     JKL<br/> 
     MNO<br/> 
    </td> 
    <td> 
     PQR<br/> 
    </td> 
    <td> 
     STU<br/ 
    </td> 
    </tr> 
</table>") 

tab <- html_table(doc)[[1]] 

mutate(tab, X1=gsub("[\r\n][[:space:]]+", ",", X1)) 
##  X1 X2 X3 
## 1  ABC DEF GHI 
## 2 JKL,MNO PQR STU 

UPDATE

對於誰在不同的格式有HTML,可能不能勝任張貼的應變人,如果你有,說:

doc <- read_html("<table> 
    <tr> 
    <td>ABC<br/></td> 
    <td>DEF<br/></td> 
    <td>GHI<br/></td> 
    </tr> 
    <tr> 
    <td>JKL<br/>MNO<br/></td> 
    <td>PQR<br/></td> 
    <td>STU<br/</td> 
    </tr> 
</table>") 

上述解決方案將不起作用,因爲它不是OP有的相同數據。我知道...這是令人震驚的

如果是這樣的情況下,複製和粘貼的解決方案肯定比鍵入一個新的問題更容易,你可以使用以下命令:

library(rvest) 
library(dplyr) 
library(purrr) 

map(1:3, function(col) { 
    html_nodes(doc, xpath=sprintf(".//tr/td[%d]", col)) %>% 
    map_chr(~paste0(html_nodes(., xpath=".//text()"), collapse=",")) 
}) %>% 
    set_names(sprintf("X%d", 1:3)) %>% 
    as_data_frame() 

但是 - 令人驚訝的是 - 如果你有不同的標籤和數據中的TD標籤或不得不使用更復雜的表結構,此解決方案可能還需要適配以及。頭腦,輕浮。

+0

儘管這樣做的確如此,但它並沒有實際上並沒有真正回答這個問題。 JKL和MNO可以相互分離的原因是它們被換行符分隔(除br標籤外)。問題是如何分隔由br分隔的值,並且如果只有br並且沒有換行符,則這不起作用。 –

+0

顯然,OP的想法不同。如果您遇到類似的情況,請隨時發佈您自己的答案或開始一個新問題。 – hrbrmstr

相關問題