You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言for循环下载PDF时如何按id列条件命名并指定保存路径

R批量下载PDF文件解决方案

前置准备:创建存储目录

首先确保本地pdfs子文件夹存在,避免下载时报路径不存在的错误:

dir.create("pdfs", showWarnings = FALSE, recursive = TRUE)

showWarnings = FALSE表示如果文件夹已存在也不会抛出警告,recursive = TRUE支持创建多级嵌套目录。

方案1:基础for循环写法(和原写法逻辑最接近)

原代码只遍历了url_pdf列,没有关联对应行的id值,修改为按行遍历数据框即可:

# 遍历数据框每一行
for (i in seq_len(nrow(head_data))) {
  # 提取当前行的PDF链接和对应ID
  cur_url <- head_data$url_pdf[i]
  cur_id <- head_data$id[i]
  # 拼接目标存储路径:pdfs目录下,以ID为文件名,保留.pdf后缀
  save_path <- file.path("pdfs", paste0(cur_id, ".pdf"))
  # 执行下载
  download.file(cur_url, destfile = save_path, mode = "wb")
  # 批量下载建议加0.3-1秒的停顿,避免请求过快被网站反爬拦截
  Sys.sleep(0.5)
}

方案2:purrr批量迭代写法(更简洁,适合tidyverse技术栈)

如果习惯用tidyverse系列包,也可以用purrr::pwalk批量处理,代码更简洁:

library(purrr)
pwalk(head_data, \(url_pdf, id) {
  save_path <- file.path("pdfs", paste0(id, ".pdf"))
  download.file(url_pdf, destfile = save_path, mode = "wb")
  Sys.sleep(0.5)
})

优化提示

如果要避免个别链接失效导致整个下载任务中断,可以给下载语句套上异常捕获:

tryCatch(
  download.file(cur_url, destfile = save_path, mode = "wb"),
  error = function(e) message("下载失败,链接:", cur_url, ",错误:", e$message)
)

内容的提问来源于stack exchange,提问作者T. C. Nobel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:57:01