使用R下载网页中无直接URL链接的zip文件方法求助
R下载FFIEC站点无直链ZIP文件的解决方案
核心问题说明
该站点的文件下载由POST表单提交触发,没有暴露静态直链,所以直接用download.file()发送GET请求、或用rvest爬取静态HTML都无法拿到目标文件,只需要模拟浏览器提交表单即可完成下载。
实现方案(无需抓包也可快速调整)
方案1:用httr包模拟POST请求(轻量首选)
不需要启动浏览器,运行速度快,步骤如下:
- 首先安装依赖包:
install.packages("httr") - 参考下方代码调整参数运行即可
library(httr) # 请求提交的固定地址 post_url <- "https://www.ffiec.gov/npw/FinancialReport/FinancialDataDownload" # 表单参数,可根据需要下载的文件类型调整 form_params <- list( selectedyear = "2021", # 以下两个参数根据你要下载的文件修改: # reportType对应要下载的报告类型,可选值比如Call/UBPR/MPD等,和页面选项对应 reportType = "Call", # downloadType固定为ZIP即可 downloadType = "ZIP" ) # 发送POST请求 resp <- POST( url = post_url, body = form_params, encode = "form", followlocation = TRUE ) # 验证请求状态并保存文件 if (http_type(resp) == "application/zip") { writeBin(content(resp, "raw"), "ffiec_2021_download.zip") cat("文件下载完成,已保存到当前工作目录") } else { stop("请求异常,状态码:", status_code(resp)) }
如果你不确定参数值,打开浏览器开发者工具(F12)切换到「网络」标签,点击页面上你要下载的文件按钮,找到名称为FinancialDataDownload的POST请求,复制「表单数据」板块的所有键值对替换上述
form_params内容即可。
方案2:用RSelenium模拟点击(零抓包适配所有场景)
如果站点有反爬校验、或者表单参数复杂不想抓包,可以用RSelenium模拟真实浏览器操作:
- 安装
RSelenium包和对应浏览器的驱动 - 代码打开目标页面后,定位到对应下载按钮的元素,模拟点击即可自动触发浏览器下载
内容的提问来源于stack exchange,提问作者DV24
相关产品推荐
相关产品推荐

