代码之家  ›  专栏  ›  技术社区  ›  klamsi

如何下载r中列数不一致的HTML表?

  •  0
  • klamsi  · 技术社区  · 7 年前

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

    首先,我尝试将它作为Excel文件在R中读取,但它似乎是一个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 回复  |  直到 7 年前
        1
  •  0
  •   Nicolás Velasquez    7 年前

    klamsi,该URL指向一个HTML文件,该文件被重命名为扩展名为“.xls”。这在网站管理员中有点常见。通过将扩展名“.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