【问题标题】:How to download multiple files using loop in R?如何在 R 中使用循环下载多个文件?
【发布时间】:2015-11-21 09:12:24
【问题描述】:

我必须使用 R 从互联网上下载有关一个国家的人口普查数据的多个 xlsx 文件。文件位于此 Link .问题是:

  1. 我无法编写一个循环让我来回下载
  2. 正在下载的文件有一些奇怪的名称,而不是地区名称。那么如何动态将其更改为地区名称。

我使用了下面提到的代码: url<-"http://www.censusindia.gov.in/2011census/HLO/HL_PCA/HH_PCA1/HLPCA-28532-2011_H14_census.xlsx" download.file(url, "HLPCA-28532-2011_H14_census.xlsx", mode="wb")

但这一次下载一个文件并且不会更改文件名。

提前致谢。

【问题讨论】:

  • 您有文件 URL 列表还是需要从您提供的链接中提取它们?请举一个“奇怪的名字”的例子:你得到什么做什么你想得到什么?
  • 我想从提供的链接中提取。正如您所看到的,另一个答案对我有所帮助,但在“Haryan's Karnal's”文件之后停止了。我不知道那里出了什么问题。试试其他的答案代码,然后你会发现错误,我在说。

标签: r excel loops download xlsx


【解决方案1】:

假设您在不知道所有 url 的情况下想要所有数据,则您的查询涉及 web 解析。包 httr 提供了有用的功能来检索给定网站的 HTML 代码,您可以解析链接。

也许这段代码就是你要找的:

library(httr)

base_url = "http://www.censusindia.gov.in/2011census/HLO/" # main website
r <- GET(paste0(base_url, "HL_PCA/Houselisting-housing-HLPCA.html"))
rc = content(r, "text")
rcl = unlist(strsplit(rc, "<a href =\\\""))   # find links
rcl = rcl[grepl("Houselisting-housing-.+?\\.html", rcl)]  # find links to houslistings

names = gsub("^.+?>(.+?)</.+$", "\\1",rcl)              # get names
names = gsub("^\\s+|\\s+$", "", names)          # trim names
links = gsub("^(Houselisting-housing-.+?\\.html).+$", "\\1",rcl)  # get links

# iterate over regions
for(i in 1:length(links)) {
    url_hh = paste0(base_url, "HL_PCA/", links[i])
    if(!url_success(url_hh)) next

    r <- GET(url_hh)
    rc = content(r, "text")
    rcl = unlist(strsplit(rc, "<a href =\\\""))   # find links
  rcl = rcl[grepl(".xlsx", rcl)]  # find links to houslistings

    hh_names = gsub("^.+?>(.+?)</.+$", "\\1",rcl)          # get names
    hh_names = gsub("^\\s+|\\s+$", "", hh_names)          # trim names
    hh_links = gsub("^(.+?\\.xlsx).+$", "\\1",rcl)   # get links

    # iterate over subregions
    for(j in 1:length(hh_links)) {
        url_xlsx = paste0(base_url, "HL_PCA/",hh_links[j])
      if(!url_success(url_xlsx)) next

        filename = paste0(names[i], "_", hh_names[j], ".xlsx")
        download.file(url_xlsx, filename, mode="wb")
    }
}

【讨论】:

  • 您共享的代码开始工作,然后我遇到错误:'download.file(url_xlsx, filename, mode = "wb") 中的错误:无法打开 destfile 'Haryana_HH_PCA1/HLPCA-06072-2011_H14_census。 xlsx" style="text-decoration:none;color:black;">Kurukshetra .xlsx',原因'无效参数' ' 但是代码没有区别。为什么这不起作用?
  • 并非所有的 html 文件都完全相同。我稍微改进了代码,试试看。
  • 如您所说,所有文件并不完全相同。我再次在“Daman & Diu”中发现了同样的错误。你如何区分不同的html文件?否则此代码下载 8 行,谢谢。但它仍然需要一些调整。
猜你喜欢
相关资源
最近更新 更多
热门标签