首页 > 解决方案 > 如何下载R中列数不一致的html表?

问题描述

我目前正在尝试从以下 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)

我很确定解决方案相当简单,但我目前陷入困境并且找不到解决方案......

提前致谢!

标签: htmlrexcelrvest

解决方案


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

推荐阅读