You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R抓取网页数据时遭网站禁止,但浏览器可正常访问

解决BLS数据导入HTTP 403错误的方案

遇到fread直接请求BLS静态文件返回403,甚至自定义User Agent也无效,大概率是BLS服务器对请求头校验严格,或是RStudio Cloud的IP被服务器拦截了。以下是几种可行的解决方法:

方法1:用httr构造完整请求头后读取

BLS服务器可能需要更贴近浏览器的请求头才能放行,用httr包手动构建请求,再将响应内容传给fread:

library(httr)
library(data.table)

# 模拟标准浏览器的请求头
request_headers <- add_headers(
  `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",
  `Accept` = "text/plain, */*; q=0.8",
  `Accept-Language` = "en-US,en;q=0.5",
  `Connection` = "keep-alive"
)

# 发送GET请求
resp <- GET("https://download.bls.gov/pub/time.series/cu/cu.series", request_headers)

# 检查请求是否成功,失败则抛出错误
stop_for_status(resp)

# 将响应文本转为data.table
cu_series <- fread(content(resp, as = "text"))

方法2:使用BLS官方API获取数据

直接爬取静态文件容易触发反爬,建议用BLS官方API接口获取数据,避免403拦截。可以用blsAPI包:

library(blsAPI)
library(data.table)

# 获取CPI系列的元数据(对应cu.series的内容)
api_response <- blsAPI('CU', catalog = TRUE)

# 转为data.table格式
cu_series <- as.data.table(api_response$catalog)

注意:未申请API密钥时,API调用有每日50次的限制;如果需要更高频次,可在BLS官网申请免费密钥后,在blsAPI中通过registrationKey参数传入。

方法3:本地下载后上传至RStudio Cloud

如果上述方法都无效,可能是RStudio Cloud的IP段被BLS屏蔽。可以先在本地浏览器打开目标URL下载cu.series文件,再上传到RStudio Cloud的工作目录,最后用fread读取本地文件:

cu_series <- fread("cu.series")

内容的提问来源于stack exchange,提问作者Zhaochen He

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:24