首页 > 解决方案 > 使用 R 通过 url 批量下载时分配用作文件名链接的字符串

问题描述

我正在 通过带有 R 的 url 循环从此页面下载 xls 文件:

for(i in 8:56) {
   i1 <- sprintf('%02d', i)
   url <- paste0("https://journals.openedition.org/acrh/29", i1, "?file=1")
   file <- paste0("myExcel_", i, ".xls")
   if (!file.exists(file)) download.file(url, file) 
}

我想将用作链接的字符串分配给下载的每个文件名

例如,我想使用“ds219.xls”作为https://journals.openedition.org/acrh/2908的文件名

<a href="2908?file=1">ds219.xls</a>

标签: r

解决方案


您需要的文件名在 URL 标头中。所以试试下面的功能:

getURLFilename <- function(url){
  require(stringi)
  hdr <-paste(curlGetHeaders(url),collapse = '')
  fname <- as.vector(stri_match(hdr,regex = '(?<=filename=\\").*(?=\\")'))
  fname
}

对于您提供的 URL:

getURLFilename('https://journals.openedition.org/acrh/2908?file=1')
# [1] "ds219.xls"

然后,在您的循环中使用:

file <- getURLFilename(url)
if (!file.exists(file)) download.file(url, file) 

推荐阅读