如何将美联储SSDMX/ZIP格式XML文件下载并读取到R中?
解决美联储Z1数据Zip文件损坏及读取问题
问题根源
你之前的代码出现zip file is corrupt警告,核心原因是**download.file默认以文本模式下载二进制文件**,在Windows系统下会自动转换换行符,破坏Zip文件的二进制结构,导致解压失败。
修复方案
只需要给download.file添加mode = "wb"参数(二进制模式下载),就能解决文件损坏问题。以下是完整可运行的代码,同时推荐使用更现代的xml2包处理XML数据:
# 加载所需包 library(xml2) library(utils) # 创建临时目录与临时Zip文件 temp_dir <- tempdir() zip_temp <- tempfile(tmpdir = temp_dir, fileext = ".zip") # 二进制模式下载Zip文件 download.file( url = "https://www.federalreserve.gov/datadownload/Output.aspx?rel=Z1&filetype=zip", destfile = zip_temp, mode = "wb", # 关键:二进制模式避免文件损坏 quiet = FALSE ) # 解压Zip文件到临时目录 xml_files <- unzip(zip_temp, exdir = temp_dir) # 查看解压得到的XML文件列表 print("解压后的XML文件路径:") print(xml_files) # 读取并解析第一个XML文件 xml_doc <- read_xml(xml_files[1]) # 查看XML结构(可选) xml_structure(xml_doc)
额外解决思路
如果上述方法仍有问题,可能需要模拟浏览器请求(部分网站会拦截非浏览器的请求),可以添加用户代理参数:
download.file( url = "https://www.federalreserve.gov/datadownload/Output.aspx?rel=Z1&filetype=zip", destfile = zip_temp, mode = "wb", method = "curl", # 需安装curl工具,Windows下可改用method="wininet" extra = "-A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'" )
替代方案:直接下载CSV/Excel版本
如果不需要XML格式,你可以直接构造对应格式的下载链接,比如CSV版本:
csv_temp <- tempfile(tmpdir = temp_dir, fileext = ".csv") download.file( url = "https://www.federalreserve.gov/datadownload/Output.aspx?rel=Z1&filetype=csv", destfile = csv_temp, mode = "wb" ) # 读取CSV数据 csv_data <- read.csv(csv_temp)
内容的提问来源于stack exchange,提问作者DaveM
相关产品推荐
相关产品推荐

