如何下载R中列数不一致的html表?

时间:2018-07-10 12:47:59

标签: html r excel rvest

我目前正在尝试从以下URL下载表:

url1<-"http://iambweb.ams.or.at/ambweb/showcognusServlet?tabkey=3643193&regionDisplay=%C3%96sterreich&export=html&outputLocale=de"

我将文件下载并保存为.xls,因为我认为它是带有以下代码的Excel文件:

temp <- paste0(tempfile(), ".xls")
download.file(url1, destfile = temp, mode = "wb")

首先,我尝试将R作为Excel文件读取,但它似乎是html(尽管可以被Excel读取):

dfAMS <- read_excel(path = temp, sheet = "Sheet1", range = "I7:I37")

因此:

df <- read_html(temp)

现在不幸的是,我陷入困境,因为以下代码行不会给我预期的结果(漂亮的表或至少.xls中的I7:I37列):

dfAMS <- html_node(df, "table") %>% html_table(fill = T) %>% tibble::as_tibble()
dplyr::glimpse(df)

我非常确定解决方案非常简单,但我目前仍处于困境,无法找到解决方案...

谢谢!

1 个答案:

答案 0 :(得分:0)

Klamsi,URL指向重命名为具有“ .xls”扩展名的html文件。这是网站站长之间比较常见的做法。通过将“ .xls”扩展名重命名为“ .html”来自己尝试。

第二个问题是html的表配置非常混乱。感兴趣的表是文档中的第五个表。

这是一种获取总人口(或“范围A7:B37,I7:K37”)值的解决方法

url <- "http://iambweb.ams.or.at/ambweb/showcognusServlet?tabkey=3643193&regionDisplay=%C3%96sterreich&export=html&outputLocale=en"

df <- read_html(url) %>%
      html_table(header = TRUE, fill = TRUE) %>% 
      .[[5]] %>% #Extract the fifth table in the list
      as.data.frame() %>% 
      .[,c(1:11)] %>% 
      select(1:2, 9:11)

names <- unlist(df[1,])
names[1:2] <- c("item", "Bundesland")
colnames(df) <- names
df <- df[-1,]

df %>% head()

  item              Bundesland Bestand Veränderung zum VJ absolut Veränderung zum VJ in %
2 Arbeitslosigkeit       Bgld    7119                       -973      -0.120242214532872
3 Arbeitslosigkeit        Ktn   16564                      -2160      -0.115359965819269
4 Arbeitslosigkeit         NÖ   46342                      -6095      -0.116234719758949
5 Arbeitslosigkeit         OÖ   29762                      -4649      -0.135102147569091
6 Arbeitslosigkeit        Sbg   11173                       -643     -0.0544177386594448
7 Arbeitslosigkeit       Stmk   28677                      -5602        -0.1634236704688