如何在R语言中从指定URL批量下载含*b13的JPEG文件
修正代码实现指定JPG文件下载
原代码存在的问题
- 未解析网页提取目标链接,直接将网页URL当作数据框索引,逻辑错误
writeJPEG语法错误,参数格式不正确,文件名拼接未使用循环变量- 硬编码循环次数,未根据实际目标文件数量动态调整
- 未筛选文件名包含
b13的目标文件 - 重复执行
install.packages,未判断包是否已安装
修正后的完整代码
# 安装并加载所需包(仅在未安装时执行安装) if (!require("jpeg")) install.packages("jpeg") library(jpeg) if (!require("rvest")) install.packages("rvest") library(rvest) if (!require("here")) install.packages("here") library(here) # 目标网页URL base_url <- "https://www.data.jma.go.jp/mscweb/data/himawari/list_ha2.html" # 指定保存文件的目标文件夹 target_dir <- here("Q:/R_himawari") # 如果目标文件夹不存在则创建 if (!dir.exists(target_dir)) dir.create(target_dir, recursive = TRUE) # 解析网页,提取所有链接 page <- read_html(base_url) all_links <- page %>% html_elements("a") %>% html_attr("href") # 筛选文件名包含"b13"的JPG文件链接 target_links <- all_links[grepl("b13.*\\.jpg$", all_links)] # 拼接完整的下载URL(处理相对路径) target_full_links <- paste0("https://www.data.jma.go.jp/mscweb/data/himawari/", target_links) # 打印找到的目标文件名 cat("筛选出的目标文件:\n") print(target_links) # 循环下载并保存文件 for (i in seq_along(target_full_links)) { current_link <- target_full_links[i] current_filename <- target_links[i] save_path <- file.path(target_dir, current_filename) # 执行下载 download.file(current_link, save_path, mode = "wb", quiet = FALSE) # 输出下载状态 if (file.exists(save_path)) { cat("已成功保存:", current_filename, "\n") } else { cat("下载失败:", current_filename, "\n") } }
代码关键说明
- 网页解析:使用
rvest包提取网页中的所有链接,通过正则表达式精准筛选含b13的JPG文件 - 路径处理:用
file.path拼接文件路径,保证跨平台兼容性;提前创建目标文件夹避免路径不存在报错 - 循环逻辑:根据实际筛选出的链接数量动态循环,保留原文件名便于后续识别文件
- 包管理:用
require判断包是否已安装,避免重复执行安装操作
内容的提问来源于stack exchange,提问作者Biraj kandel
相关产品推荐
相关产品推荐

