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

R语言如何从指定URL筛选下载符合命名与年份要求的文件

R语言定向筛选下载NOAA VCI数据方案

全程不需要全量拉取140G目录内容,先拉取文件列表本地完成规则过滤,仅下载符合要求的目标文件,具体实现步骤如下:

前置依赖安装

用到的工具包均为CRAN官方源可直接安装的通用包,无特殊依赖:

# 首次运行执行安装,已装过可跳过
install.packages(c("rvest", "curl", "stringr"))
# 加载包
library(rvest)
library(curl)
library(stringr)

拉取远程目录文件清单

仅读取目录页的文件名列表,不下载任何实体数据,几秒即可完成:

# 配置数据源根地址
base_url <- "https://www.star.nesdis.noaa.gov/pub/corp/scsb/wguo/data/Blended_VH_4km/geo_TIFF/"
# 提取目录下所有tif格式文件名
dir_page <- read_html(base_url)
all_tif_files <- dir_page %>%
  html_elements("a") %>%
  html_attr("href") %>%
  str_subset("\\.tif$")

按自定义规则过滤目标文件

严格匹配两个筛选条件:文件名包含VCI.tif、文件对应年份在1981-2011区间:

# 第一层筛选:保留文件名带VCI.tif的文件
vci_files <- all_tif_files[str_detect(all_tif_files, "VCI\\.tif$")]
# 第二层筛选:从文件名提取4位年份,筛选1981-2011区间文件
# 适配该数据集命名规则:文件名格式为 VH_YYYYMM_XXX.tif
file_year <- as.integer(str_extract(vci_files, "(?<=_)\\d{4}(?=\\d{2}_)"))
target_files <- vci_files[!is.na(file_year) & file_year >= 1981 & file_year <= 2011]
# 打印筛选结果核对数量
cat("筛选完成,待下载文件共", length(target_files), "个\n")

过滤逻辑完全在本地内存运行,不会提前下载文件实体,筛选完成后再发起下载请求,完全避免无效流量和空间浪费

批量下载(带容错、断点续跳)

下载时自动跳过本地已存在的文件,中途断网重跑不会重复下载,单个文件下载失败不中断整体任务:

# 配置本地存储路径,可自行修改
local_save_path <- "./noaa_vci_1981_2011/"
dir.create(local_save_path, showWarnings = F, recursive = T)

# 遍历下载
for (file in target_files) {
  local_file <- paste0(local_save_path, file)
  remote_file <- paste0(base_url, file)
  # 跳过已下载完成的文件
  if (file.exists(local_file)) {
    message("跳过已下载:", file)
    next
  }
  # 捕获下载错误,避免中断
  tryCatch({
    curl_download(remote_file, local_file, quiet = F)
    message("下载完成:", file)
  }, error = function(e) {
    message("下载失败:", file, " 原因:", e$message)
  })
}

实用优化提示

  • 网络不稳定时可以在curl_download里加超时配置,比如传入参数handle = new_handle(timeout = 600)把单文件超时设为10分钟
  • 需要提速可以开3-5个并行线程下载,不要开太高并发避免给源站造成压力
  • 下载前可以提前请求每个文件的头信息拿到文件大小,累加算总容量,提前预留磁盘空间
  • 后续要调整筛选规则(比如换指数、换年份区间)直接修改过滤段的逻辑即可,比写bash正则适配wget灵活很多

内容的提问来源于stack exchange,提问作者Shunrei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:54:07