2011-09-13 50 views
8

我經常從維基百科中提取表格。 Excel的Web導入在維基百科上無法正常工作,因爲它將整個頁面視爲表格。在谷歌電子表格,我可以輸入:在R中導入維基百科表格

=ImportHtml("http://en.wikipedia.org/wiki/Upper_Peninsula_of_Michigan","table",3) 

這個功能將下載第三表,其中列出了密歇根州的UP,從該頁面的所有的縣。

R裏有類似的東西嗎?或者可以通過用戶定義的函數創建?

+1

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

+1

@DWin簡單,是的;但重複性/可重複性?沒有。是不是一個腳本都做得很好? – karlos

+0

@Ramnath我沒有看到該線程,但該線程提供的解決方案確實有效:readHTMLTable(theurl)和tables [3]。感謝分享。將不得不弄清楚如何將結果轉換爲適當的框架 – karlos

回答

9

功能readHTMLTable在包XML是理想的。

嘗試以下操作:

library(XML) 
doc <- readHTMLTable(
     doc="http://en.wikipedia.org/wiki/Upper_Peninsula_of_Michigan") 

doc[[6]] 

      V1   V2     V3        V4 
1  County Population Land Area (sq mi) Population Density (per sq mi) 
2  Alger  9,862    918       10.7 
3  Baraga  8,735    904        9.7 
4  Chippewa  38,413    1561       24.7 
5  Delta  38,520    1170       32.9 
6 Dickinson  27,427    766       35.8 
7  Gogebic  17,370    1102       15.8 
8  Houghton  36,016    1012       35.6 
9   Iron  13,138    1166       11.3 
10 Keweenaw  2,301    541        4.3 
11  Luce  7,024    903        7.8 
12 Mackinac  11,943    1022       11.7 
13 Marquette  64,634    1821       35.5 
14 Menominee  25,109    1043       24.3 
15 Ontonagon  7,818    1312        6.0 
16 Schoolcraft  8,903    1178        7.6 
17  TOTAL 317,258    16,420       19.3 

readHTMLTable的HTML頁面的每個元素返回的data.frame的List。您可以使用names獲取有關每個元素的信息:

> names(doc) 
[1] "NULL"                    
[2] "toc"                     
[3] "Election results of the 2008 Presidential Election by County in the Upper Peninsula" 
[4] "NULL"                    
[5] "Cities and Villages of the Upper Peninsula"           
[6] "Upper Peninsula Land Area and Population Density by County"       
[7] "19th Century Population by Census Year of the Upper Peninsula by County"    
[8] "20th & 21st Centuries Population by Census Year of the Upper Peninsula by County" 
[9] "NULL"                    
[10] "NULL"                    
[11] "NULL"                    
[12] "NULL"                    
[13] "NULL"                    
[14] "NULL"                    
[15] "NULL"                    
[16] "NULL" 
+0

謝謝安德烈。我喜歡這個解決方案。 – karlos

+1

我嘗試了代碼'readHTMLTable(doc =「https://en.wikipedia.org/wiki/Gross_domestic_product」)'並且得到了'XML內容似乎不是XML:'我猜測'https'可以成爲問題,如何解決它? – Konrad

+5

維基百科移至安全連接後,此解決方案不再有效。任何線索如何讓它工作? – Shambho

2

一個簡單的方法來做到這一點是使用RGoogleDocs接口有谷歌文件做轉換爲你:

http://www.omegahat.org/RGoogleDocs/run.html

然後,您可以使用谷歌=ImportHtml文檔功能及其所有預建造了魔法。

+0

感謝您的答覆。我會通過文檔閱讀。 – karlos

4

下面是與安全(HTTPS)鏈接有效的解決方案:

install.packages("htmltab") 
library(htmltab) 
htmltab("http://en.wikipedia.org/wiki/Upper_Peninsula_of_Michigan",3) 
2

上Andrie大廈的答案,解決SSL。如果你可以帶一件其他庫的依賴關係:

library(httr) 
library(XML) 

url <- "https://en.wikipedia.org/wiki/Upper_Peninsula_of_Michigan" 

r <- GET(url) 

doc <- readHTMLTable(
    doc=content(r, "text")) 

doc[6]