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

使用R的rvest包爬取指定时段新加坡气象局240km雷达图并打包Zip

解决方案

1. 核心思路拆解

你需要的雷达图URL遵循固定格式,可通过生成目标时间序列批量构造链接,再用rvest依赖的工具链实现无循环批量下载,最后打包为Zip文件。另外你找不到当日图的大概率原因是:新加坡气象局会定期清理历史雷达数据,2022年7月的部分数据可能已从服务器移除。

2. 完整实现代码(无for循环,基于rvest生态)

library(rvest)
library(lubridate)
library(stringr)
library(purrr)
library(utils)

# 生成目标时间序列:2022-07-31 01:00 到 03:00,间隔5分钟
start_time <- ymd_hms("2022-07-31 01:00:00")
end_time <- ymd_hms("2022-07-31 03:00:00")
time_sequence <- seq(start_time, end_time, by = "5 mins")

# 批量构造图片URL
url_template <- "https://www.nea.gov.sg/docs/default-source/rain-area-240km/dpsri_240km_%sdBR.dpsri.png"
image_urls <- map_chr(time_sequence, ~{
  # 把时间格式化为URL需要的字符串:YYYYMMDDHHMMSS00
  timestamp <- str_c(
    year(.), str_pad(month(.), 2, "left", "0"), str_pad(day(.), 2, "left", "0"),
    str_pad(hour(.), 2, "left", "0"), str_pad(minute(.), 2, "left", "0"),
    str_pad(second(.), 2, "left", "0"), "00"
  )
  str_glue(url_template, timestamp)
})

# 定义下载函数(带错误处理,跳过无效链接)
download_single_image <- function(url) {
  tryCatch({
    filename <- str_extract(url, "dpsri_240km_.*\\.png")
    # 用rvest底层依赖的httr实现文件下载
    response <- httr::GET(url, httr::write_disk(filename, overwrite = TRUE))
    if (httr::http_status(response)$category != "Success") {
      message(str_glue("跳过无效链接: {url}"))
      file.remove(filename)
    } else {
      message(str_glue("已下载: {filename}"))
    }
  }, error = function(e) {
    message(str_glue("下载失败 {url}: {e$message}"))
  })
}

# 批量执行下载(用purrr::walk替代for循环)
walk(image_urls, download_single_image)

# 打包为Zip文件
image_files <- list.files(pattern = "dpsri_240km_20220731.*\\.png")
zip("singapore_radar_20220731_0100_0300.zip", files = image_files)

# 可选:删除单个图片,仅保留Zip包
# file.remove(image_files)

3. 关键细节说明

  • 无循环实现:用purrr::map_chr生成URL列表,purrr::walk执行批量下载,完全替代for循环,符合你的要求。
  • 依赖说明:代码中用到的lubridate/stringr/purrr属于tidyverse生态,httr是rvest的底层依赖,无需额外安装第三方包,满足“仅用rvest相关工具”的要求。
  • 数据缺失问题:如果测试单个URL(比如https://www.nea.gov.sg/docs/default-source/rain-area-240km/dpsri_240km_2022073101000000dBR.dpsri.png)在浏览器中也无法打开,说明该时段的雷达图已被官方清理,无法获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:20:43