如何通过R自动化操作美国财政部网站批量下载拍卖数据CSV?
R批量获取美国财政部拍卖CSV数据指南
核心思路
别纠结模拟点击按钮,直接抓CSV下载的后台请求就行——网页上的CSV按钮本质是触发了一个带参数的HTTP请求,我们直接构造这个请求循环调用,比模拟浏览器操作高效得多。
步骤1:从开发者工具提取关键信息
打开Chrome开发者工具的「网络」标签,点击CSV按钮后,找到对应的请求:
- 确认请求方法是
POST还是GET - 复制请求里的Form Data(提交的参数),里面必须包含:
- 列选择参数(比如
columns=all或者所有列名的集合,对应「显示全部列」) - 每页行数参数(比如
rowsPerPage=1000,对应设置1000行) - 分页参数(比如
page=1,循环时改这个值从1到10)
- 列选择参数(比如
步骤2:用httr构造循环请求
library(httr) library(readr) # 替换成你从开发者工具里拿到的CSV请求地址 base_url <- "https://www.treasurydirect.gov/auctions/auction-query/download" # 基础参数,从Form Data里复制,确保参数名和值完全匹配 base_params <- list( columns = "all", # 显示全部列 rowsPerPage = "1000", # 每页1000行 # 这里补全其他必填参数,比如时间范围、拍卖类型等,从开发者工具里的参数抄 ) # 循环10次下载所有页面 for(page_num in 1:10){ # 拼接当前页的分页参数 current_params <- c(base_params, list(page = page_num)) # 发送请求,如果是GET请求就换成GET(),参数用query=current_params response <- POST(base_url, body = current_params, encode = "form") # 检查请求是否成功,失败就报错 stop_for_status(response) # 保存CSV文件 file_name <- paste0("treasury_auctions_page_", page_num, ".csv") write_content(content(response, "text"), file_name) # 打印进度 cat("已完成第", page_num, "页,文件保存为", file_name, "\n") # 可选:加1秒延迟,避免请求太频繁被服务器拦截 Sys.sleep(1) }
关键注意事项
- 参数必须精准:要完全匹配开发者工具里的Form Data,包括参数的大小写、格式(比如有的参数是字符串,不能写成数字)
- 处理反爬:如果遇到403错误,给请求加个浏览器User-Agent头:
response <- POST(base_url, body = current_params, encode = "form", add_headers(`User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")) - 合并数据:下载完成后可以合并所有CSV文件:
library(dplyr) # 找到所有下载的CSV文件 csv_files <- list.files(pattern = "^treasury_auctions_page_.*\\.csv$") # 合并成一个数据框 all_auctions <- bind_rows(lapply(csv_files, read_csv)) # 保存合并后的文件 write_csv(all_auctions, "treasury_auctions_full_data.csv")
内容的提问来源于stack exchange,提问作者rideofyourlife
相关产品推荐
相关产品推荐

