
本文介绍如何通过分析ajax接口规律,绕过前端javascript交互限制,直接请求真实数据接口来抓取网页中隐藏的动态表格(如击球表、近5场/近10场统计),避免依赖selenium,提升爬取效率与稳定性。
本文介绍如何通过分析ajax接口规律,绕过前端javascript交互限制,直接请求真实数据接口来抓取网页中隐藏的动态表格(如击球表、近5场/近10场统计),避免依赖selenium,提升爬取效率与稳定性。
现代体育数据网站(如 Covers.com)常将不同维度的统计表格(投球 Pitching、击球 Hitting、近期表现 Last 5/Last 10)通过前端标签页或按钮动态加载,而非一次性渲染在初始 HTML 中。此时仅用 requests + pd.read_html() 请求原始 URL(如 .../matchup/279605)只能获取默认展示的表格(通常是投球表),而无法触达其他选项卡内容——因为这些内容实际由独立的后端 API 异步返回,与 URL 路径强相关。
关键在于识别并构造对应的数据接口 URL。以 Covers.com 为例,观察其网络请求可发现:
- 主页面 URL:https://www.covers.com/sport/baseball/mlb/matchup/279605
- 击球表(Hitting)真实数据接口为:
https://www.covers.com/sport/baseball/mlb/matchup/279605/stats-analysis/hitting/overall - 同理,近5场比赛击球数据为:
https://www.covers.com/sport/baseball/mlb/matchup/279605/stats-analysis/hitting/last-5 - 投球表(Pitching)对应路径则为 /stats-analysis/pitching/overall 或 /last-10
因此,无需模拟点击或使用浏览器自动化工具(如 Selenium),只需按规则拼接 URL 即可直接获取结构化 HTML 表格:
import pandas as pd
def fetch_covers_table(matchup_id: str, category: str, period: str = "overall") -> pd.DataFrame:
"""
通用函数:抓取 Covers.com 指定比赛 ID 的统计表格
Args:
matchup_id: 比赛唯一标识(如 '279605')
category: 统计类型,支持 'hitting', 'pitching'
period: 时间范围,支持 'overall', 'last-5', 'last-10'
Returns:
解析后的 DataFrame(假设页面仅含一个语义化表格)
"""
base_url = f"https://www.covers.com/sport/baseball/mlb/matchup/{matchup_id}"
url = f"{base_url}/stats-analysis/{category}/{period}"
try:
df = pd.read_html(url, header=0)[0] # header=0 显式指定首行为列名
df.columns = df.columns.str.strip() # 清理列名空格
return df
except ValueError as e:
raise RuntimeError(f"未在 {url} 中找到表格,请确认URL有效或检查页面结构变化") from e
# 示例调用
hitting_overall = fetch_covers_table("279605", "hitting", "overall")
hitting_last5 = fetch_covers_table("279605", "hitting", "last-5")
pitching_last10 = fetch_covers_table("279605", "pitching", "last-10")
print("【击球总览】")
print(hitting_overall.head())
print("\n【近5场击球】")
print(hitting_last5.head())
⚠️ 注意事项:
- 反爬风险:该站点未严格校验 User-Agent,但高频请求可能触发封禁。建议添加请求头模拟浏览器,并控制请求间隔(如 time.sleep(1));
-
结构稳定性:pd.read_html() 默认解析所有
,若页面含多个表格,需通过 match= 参数或索引精确定位(如 [0] → [1]);
- 异常处理:务必捕获 ValueError(无表格)、URLError(连接失败)等,避免程序中断;
- 动态更新:网站改版可能导致路径规则变更,建议定期验证接口可用性,或结合开发者工具(Network → XHR/Fetch)实时抓包确认最新 endpoint。
综上,面对“需点击切换”的表格,核心思路是逆向定位数据源,而非模拟用户行为。通过分析 URL 模式与网络请求,构建可复用的参数化接口调用逻辑,即可高效、轻量地批量获取多维度结构化数据。










