使用baseballr包从Baseball Savant下载数据时遭遇HTTP Error 504求助
解决baseballr::statcast_search HTTP 504超时错误
问题定位
HTTP 504是网关超时错误,结合你搬家后出现问题的场景,核心原因是新网络环境下请求超时/触发Baseball Savant的限流机制,大体积单请求(3万条数据)更容易触发这类问题。
可行修复方案
1. 拆分请求时间范围
将7天的请求拆分为单日请求,降低单次请求的数据量,同时添加延迟避免限流:
# 生成单日日期序列 date_range <- seq(as.Date("2022-09-13"), as.Date("2022-09-20"), by = "day") data_list <- list() # 循环获取每日数据 for (date in date_range) { daily_data <- statcast_search( start_date = date, end_date = date, player_type = "pitcher" ) data_list[[as.character(date)]] <- daily_data Sys.sleep(2) # 添加2秒延迟,避免频繁请求触发限流 } # 合并所有数据 final_dataset <- do.call(rbind, data_list)
2. 调整网络与超时设置
- 测试当前网络访问Baseball Savant的速度,若延迟过高,尝试切换网络(如手机热点)排除运营商/防火墙限制
- 全局延长请求超时时间(baseballr依赖httr包):
library(httr) set_config(config(timeout = 60)) # 设置60秒超时,覆盖默认短超时
3. 更新baseballr包
检查并更新到最新版本,修复已知的请求问题:
update.packages("baseballr")
4. 验证接口可用性
先请求极小范围数据(如1天的投手数据),确认Baseball Savant接口本身正常:
test_data <- statcast_search(start_date = "2022-09-13", end_date = "2022-09-13", player_type = "pitcher")
注意事项
如果拆分请求后仍报错,可适当延长Sys.sleep()的时长(如5秒),避免短时间内发送过多请求触发Baseball Savant的限流策略。
内容的提问来源于stack exchange,提问作者stevoo_p13
相关产品推荐
相关产品推荐

