2011-09-13 20 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]