如何用RStudio自动下载指定网站目录中最新添加的气象数据归档文件
用R自动下载DWD最新RADOLAN逐小时气象数据归档文件
以下是实现自动识别并下载目标网站最新气象归档文件的R代码,同时可自动处理文件解压与扩展名调整:
1. 加载所需R包
需要用到xml2解析网页、lubridate处理时间、httr完成文件下载,先确保已安装这些包:
# 安装依赖包(首次运行需执行) install.packages(c("xml2", "lubridate", "httr")) # 加载包 library(xml2) library(lubridate) library(httr)
2. 解析网页获取文件列表与修改时间
目标网站是Apache索引页,可直接解析HTML提取文件信息,过滤出.tar.gz格式的归档文件:
# 目标目录URL base_url <- "https://opendata.dwd.de/climate_environment/CDC/grids_germany/hourly/radolan/recent/asc/" # 读取并解析网页 page <- read_html(base_url) file_nodes <- html_nodes(page, "tr")[-1:-3] # 跳过表头与无关行 # 提取每个归档文件的名称和修改时间 file_info <- lapply(file_nodes, function(node) { link <- html_attr(html_node(node, "a"), "href") # 只保留.tar.gz格式的归档文件 if (grepl("\\.tar\\.gz$", link)) { mod_time_str <- html_text(html_node(node, "td:nth-child(3)")) # 转换为时间格式(DWD服务器用欧洲柏林时间) mod_time <- dmy_hms(mod_time_str, tz = "Europe/Berlin") list(filename = link, modified = mod_time) } else { NULL } }) # 整理为数据框 file_df <- do.call(rbind, Filter(Negate(is.null), file_info))
3. 筛选最新文件并下载
按修改时间排序,取最新的文件进行下载:
# 按修改时间降序排序,获取最新文件 latest_file <- file_df[order(file_df$modified, decreasing = TRUE), ][1, ] latest_file_url <- paste0(base_url, latest_file$filename) # 设置本地保存路径(可自行修改) save_path <- "./dwd_radolan_data/" dir.create(save_path, recursive = TRUE, showWarnings = FALSE) # 下载文件到本地 local_file <- file.path(save_path, latest_file$filename) GET(latest_file_url, write_disk(local_file, overwrite = TRUE))
4. 自动处理文件扩展名/解压归档
如果需要自动解压.tar.gz归档,并调整文件扩展名(根据你的需求修改):
# 解压归档文件到指定路径 untar(local_file, exdir = save_path) # 示例:修改解压后.asc文件的扩展名(比如改为.dat) extracted_asc_files <- list.files(save_path, pattern = "\\.asc$", full.names = TRUE) file.rename(extracted_asc_files, gsub("\\.asc$", ".dat", extracted_asc_files))
注意事项
- 若目标网页的HTML结构发生变化,可能需要调整
html_nodes的选择器; - 确保R环境能正常访问外网,若有代理需提前配置;
- 可将上述代码封装为函数,方便定时运行(比如用
taskscheduleR包实现定时任务)。
内容的提问来源于stack exchange,提问作者J Maya
相关产品推荐
相关产品推荐

