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")的全部字段数据。
解决步骤
验证下载文件有效性
先确认下载的文件是合法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)正确读取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))异常情况处理
如果仍提示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
相关产品推荐
相关产品推荐

