R中的Web Scraping - readHTMLTable将表名称设为NULL

时间:2014-04-01 07:02:19

标签: r web-scraping

这是我用于读取表的代码,但是读取的表具有NULL名称。有没有更好的方法来找到平方英里每个州的土地面积而没有数字中的逗号?我有想法提取表并转到第二个表并将其转换为data.frame但现在他们有NULL名称我不知道我该怎么做或者是否有更好的方法

require("XML")
url="http://simple.wikipedia.org/wiki/List_of_U.S._states_by_area"
wiki_page=readLines(url)
length(wiki_page)
tables=readHTMLTable(url)

以下是示例输出:

> tables
$`NULL`
   Rank          State       km²     miles²
1     1         Alaska 1,717,854    663,267
2     2          Texas   696,621    268,581
3     3     California   423,970    163,696
4     4        Montana   380,838    147,042
5     5     New Mexico   314,915    121,589
6     6        Arizona   295,254    113,998
7     7         Nevada   286,351    110,561
8     8       Colorado   269,601    104,094
9     9         Oregon   254,805     98,381
....

1 个答案:

答案 0 :(得分:1)

您应该阅读名称并将其分配给表格:

library(XML)
require("XML")
url="http://simple.wikipedia.org/wiki/List_of_U.S._states_by_area"
doc <- htmlParse(url)
nn <- xpathSApply(doc,'//*[@class="mw-headline"]',xmlValue)[-4]
tabs <- readHTMLTable(url)
names(tabs) <- nn

检查结果:

str(tabs,max=1)
# List of 3
# $ Total area:'data.frame':  50 obs. of  4 variables:
#   $ Land area :'data.frame':  50 obs. of  4 variables:
#   $ Water area:'data.frame':  50 obs. of  5 variables:

数字转换:

convert_num <- 
  function(x)as.numeric(gsub(',','',x))

lapply(tabs,function(y){
  y[,-c(1,2)] <- sapply(y[,-c(1,2)],convert_num)
  y

})