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

如何用R下载指定时段240km雷达图、排查404错误并打包?

问题排查与解决方案

错误原因分析

你遇到的404错误主要来自两个核心问题:

  1. URL格式拼接错误:对比示例URL,你的代码生成的URL缺少关键部分:
    • 分钟数未补零(比如i=0时应该是00而非0)
    • 缺失时间串末尾的0000dBR标识
    • 示例URL的时间格式为YYYYMMDDHHMM0000dBR,你的拼接逻辑完全不符合该规则
  2. 错误使用read_html:图片URL本身是直接的资源地址,不需要用read_html解析网页,直接请求资源即可。

修正后的代码实现

以下是包含正确生成URL、下载图片、打包为ZIP的完整可运行代码:

library(httr)
library(zip)

# 1. 生成目标时间序列:2022-07-31 01:00 到 03:00,间隔5分钟
start_time <- as.POSIXct("2022-07-31 01:00:00", tz = "Asia/Singapore")
end_time <- as.POSIXct("2022-07-31 03:00:00", tz = "Asia/Singapore")
time_sequence <- seq(start_time, end_time, by = "5 mins")

# 2. 创建临时文件夹存放下载的图片
temp_dir <- tempfile(pattern = "radar_images_")
dir.create(temp_dir)

# 3. 循环下载每个时间点的图片
for (time_point in time_sequence) {
  # 格式化时间为URL所需的字符串:YYYYMMDDHHMM0000dBR
  time_str <- format(time_point, "%Y%m%d%H%M0000dBR")
  # 拼接完整URL
  img_url <- paste0("https://www.nea.gov.sg/docs/default-source/rain-area-240km/dpsri_240km_", time_str, ".dpsri.png")
  
  # 定义本地保存路径
  save_path <- file.path(temp_dir, basename(img_url))
  
  # 下载图片(跳过不存在的资源,避免程序中断)
  tryCatch({
    GET(img_url, write_disk(save_path, overwrite = TRUE))
    cat("已下载:", basename(img_url), "\n")
  }, error = function(e) {
    cat("下载失败(资源不存在):", basename(img_url), "\n")
  })
}

# 4. 将所有图片打包为ZIP文件
zip_file <- "20220731_radar_images_240km.zip"
zip(zip_file, files = list.files(temp_dir, full.names = TRUE))

cat("所有操作完成,ZIP文件已保存为:", zip_file, "\n")

代码说明

  • 时间序列生成:用seq生成精确时间点,避免手动拼接小时和分钟的出错概率
  • URL格式化:用format函数直接生成符合要求的时间字符串,确保格式完全匹配示例URL
  • 错误处理:用tryCatch跳过不存在的资源(部分时间点可能无雷达图),避免程序中断
  • ZIP打包:使用zip包将所有下载图片打包为单个ZIP文件,方便存储与传输

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:35:29