【问题标题】:Web Scraping in R--readHTMLTable has table names as NULLR--readHTMLTable 中的 Web Scraping 的表名为 NULL
【发布时间】:2014-04-01 07:02:19
【问题描述】:

这是我读取表格的代码,但读取的表格名称为 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
....

【问题讨论】:

  • 谢谢。表[[2]] 为我工作。

标签: r web-scraping


【解决方案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

})

【讨论】:

    猜你喜欢
    • 2019-11-28
    • 2020-04-08
    • 1970-01-01
    • 2015-01-06
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多