使用requests、re、json爬取Rocket League Tracker时stats-v2为空如何修复
异常核心成因
- 站点前端渲染逻辑迭代:Rocket League Tracker近期版本更新将原服务端直出的全量业务数据拆分,首屏静态HTML仅加载玩家头像、ID等基础展示内容,包含段位数据的
stats-v2模块改为前端JS执行后,通过异步接口拉取再动态注入window.__INITIAL_STATE__。requests仅能获取未经过JS解析的静态HTML,自然只能拿到空字段的空壳结构。 - 基础反爬规则触发:站点新增请求特征校验,当检测到请求缺失真实浏览器标识(如匹配的
User-Agent、合法的Referer来源头)时,会直接返回精简版无核心业务数据的HTML响应,不会向非浏览器类请求注入玩家段位这类敏感统计信息。 - 原有正则匹配规则失效:站点在给
window.__INITIAL_STATE__赋值时新增了转义字符、行内无意义注释占位,此前适配的简单正则会提前截断匹配范围,最终提取到空的JSON字符串,对应字段全为空值。
可落地修复步骤
- 第一步验证反爬触发情况:把当前脚本请求到的响应完整保存为本地HTML文件,和浏览器正常打开同一玩家页面的源码做字段对比。如果确认是缺少核心统计数据,直接给请求补全真实浏览器的请求头配置,示例代码:
重新请求后检查响应中的import requests browser_headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36", "Referer": "对应玩家的详情页地址", "Accept-Language": "en-US,en;q=0.9" } resp = requests.get("你原本请求的详情页URL", headers=browser_headers)stats-v2字段是否返回真实段位值。 - 第二步适配异步数据加载逻辑:如果补全请求头后仍无法从静态HTML中拿到
stats-v2数据,说明站点已将核心数据完全从首屏HTML剥离。此时可打开浏览器开发者工具的网络面板,筛选XHR异步请求,定位加载段位数据的接口,直接替换原有HTML爬取逻辑请求该接口获取结构化JSON,稳定性远高于正则匹配静态页面。 - 第三步修正正则匹配规则:将原有简单的边界匹配规则升级,跳过赋值前后的杂散注释、转义字符,匹配从
window.__INITIAL_STATE__ =开始、到所在script块结束的完整JSON字符串再做解析,避免提取到截断的空壳内容。 - 兜底适配:如果后续请求仍被拦截,可使用
requests.Session()维持会话状态,先请求站点首页获取合法会话cookie,再带着cookie请求玩家详情页,降低被反爬识别的概率。
内容的提问来源于stack exchange,提问作者Andrew Prince
相关产品推荐
相关产品推荐

