如何用R提取BLS失业率图表SVG文件中的底层数据?
获取BLS失业率数据并转为R数据框的可行方案
首先明确:你下载的SVG是图表的渲染图形文件,不包含原始结构化的失业率数据,所以从SVG提取数据的思路不可行。下面给你两种合法、稳定的解决方案,替代爬取和手动复制的方式:
方案一:使用专门的blsR包(推荐)
blsR是专门对接BLS API的R包,能直接获取结构化数据,无需处理网页爬取的反爬限制。
步骤:
- 去BLS官网注册一个免费的API密钥(注册后即时可用)
- 安装并加载
blsR包:
install.packages("blsR") library(blsR)
- 设置API密钥并请求数据:
# 替换成你的API密钥 bls_set_api_key("你的BLS API密钥") # 请求失业率数据(系列ID:LNS14000000是美国总体失业率的官方代码) unemp_data <- bls_request(series_ids = "LNS14000000", start_year = 2000, end_year = 2024) # 转为标准R数据框 unemp_df <- as.data.frame(unemp_data)
运行后unemp_df就是包含日期、失业率数值的结构化数据框,格式规整,无需手动清理。
方案二:用httr手动调用BLS API
如果不想用第三方包,也可以直接用httr发送HTTP请求:
install.packages("httr") install.packages("jsonlite") library(httr) library(jsonlite) # 构造请求参数 api_url <- "https://api.bls.gov/publicAPI/v2/timeseries/data/" request_body <- list( seriesid = list("LNS14000000"), startyear = "2000", endyear = "2024", registrationKey = "你的BLS API密钥" ) # 发送请求并解析数据 response <- POST(api_url, body = toJSON(request_body), content_type("application/json")) response_data <- fromJSON(content(response, "text")) # 提取数据并转为数据框 unemp_df <- as.data.frame(response_data$Results$series$data) # 整理日期和数值格式 unemp_df$date <- paste(unemp_df$year, unemp_df$period, sep = "-") unemp_df$value <- as.numeric(unemp_df$value)
补充说明:
- BLS API的系列ID可以在官网查询,比如你要的总体失业率对应
LNS14000000,如果需要细分群体的失业率,能找到对应的系列ID直接替换即可。 - 免费API密钥的请求限额足够个人使用,不用担心限制问题。
内容的提问来源于stack exchange,提问作者farrow90
相关产品推荐
相关产品推荐

