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

R语言下载解压指定网站JSON压缩文件失败,请求技术支持

问题描述

我尝试从季节性工作相关网站读取文件,目标文件为JSON压缩包,但多次尝试下载解压均失败。最新使用的R代码如下:

temp <- tempfile()
download.file("https://api.seasonaljobs.dol.gov/datahub-search/sjCaseData/zip/jo/2023-12-25.zip",temp)
data <- read.table(unz(temp, "a1.dat"))
unlink(temp)

运行后报错信息:

> temp <- tempfile()
> download.file("https://api.seasonaljobs.dol.gov/datahub-search/sjCaseData/zip/jo/2023-12-25.zip",temp)
trying URL 'https://api.seasonaljobs.dol.gov/datahub-search/sjCaseData/zip/jo/2023-12-25.zip'
downloaded 55 KB

> data <- read.table(unz(temp, "a1.dat"))
Error in open.connection(file, "rt") : cannot open the connection
In addition: Warning message:
In open.connection(file, "rt") :
  cannot open zip file 'C:\Users\AppData\Local\Temp\RtmpMT9ToE\file4e387cdd2f0d'

我的核心需求是获取特定州(例如:"CA")的全部字段数据。

解决步骤
  1. 验证下载文件有效性
    先确认下载的文件是合法zip包,避免因URL错误或文件损坏导致问题:

    # 安装依赖包(首次运行需执行)
    install.packages(c("zip", "jsonlite"))
    
    library(zip)
    
    temp_zip <- tempfile(fileext = ".zip")
    # 用目标日期的链接下载,添加二进制模式避免文件损坏
    download.file("https://api.seasonaljobs.dol.gov/datahub-search/sjCaseData/zip/jo/2023-12-29", temp_zip, mode = "wb")
    
    # 查看压缩包内的实际文件名(不要默认是a1.dat)
    zip_list(temp_zip)
    
  2. 正确读取JSON数据并筛选州信息
    因为目标是JSON压缩文件,需用JSON专用工具读取,而非read.table:

    library(jsonlite)
    
    # 获取压缩包内的JSON文件名
    json_filename <- zip_list(temp_zip)$filename[1]
    
    # 解压到临时目录
    temp_dir <- tempdir()
    unzip(temp_zip, files = json_filename, exdir = temp_dir)
    
    # 读取JSON数据
    full_data <- fromJSON(file.path(temp_dir, json_filename))
    
    # 筛选CA州的数据
    ca_data <- full_data[full_data$state == "CA", ]
    
    # 清理临时文件
    unlink(temp_zip)
    unlink(file.path(temp_dir, json_filename))
    
  3. 异常情况处理
    如果仍提示zip损坏,可能是服务器需要请求头验证,添加User-Agent重试:

    download.file(
      url = "https://api.seasonaljobs.dol.gov/datahub-search/sjCaseData/zip/jo/2023-12-29",
      destfile = temp_zip,
      mode = "wb",
      headers = c("User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36")
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:45:15