Python初学者因nhl.com改版旧代码失效,如何提取主场上Powerplay的Team与PP%
NHL主场Powerplay统计字段提取实现方案
依赖准备
- 仅需2个轻量Python库完成全流程,执行安装命令:
pip install requests pandas - 优势:直接对接官方公开数据接口,完全绕开网页前端改版导致的元素选择器失效问题,比原有爬取HTML表格的方案稳定性大幅提升
完整可运行代码
import requests import pandas as pd # 填入你梳理完成的目标API地址 TARGET_API = "https://api.nhle.com/stats/rest/en/team/powerplay?isAggregate=false&isGame=false&sort=%5B%7B%22property%22:%22powerPlayPct%22,%22direction%22:%22DESC%22%7D%5D&start=0&limit=50&factCayenneExp=gamesPlayed%3E=1&cayenneExp=gameTypeId=2%20and%20homeRoad=%22H%22%20and%20seasonId%3C=20202021%20and%20seasonId%3E=20202021" # 拉取接口原始数据 resp = requests.get(TARGET_API, timeout=10) raw_json = resp.json() # 定位到球队统计数组 stat_entries = raw_json["data"] # 逐行提取目标字段 extracted_rows = [] for entry in stat_entries: extracted_rows.append({ "Team": entry["teamName"], # 对应表格第一列Team "PP%": entry["powerPlayPct"] # 对应表格倒数第二列PP% }) # 转为结构化表格 result_df = pd.DataFrame(extracted_rows) # 控制台输出预览 print(result_df.head()) # 如需导出本地CSV文件,取消下一行注释执行即可 # result_df.to_csv("nhl_home_pp_stats.csv", index=False, encoding="utf-8-sig")
调试注意事项
- 该公开API无需鉴权,不要随意添加自定义请求头,否则可能触发接口的基础限流规则
- 后续更换赛季、主客场筛选条件时,仅需修改API链接内的对应参数(如seasonId、homeRoad取值),核心提取逻辑无需改动
- 旧代码失效的核心原因是原有逻辑依赖静态网页的DOM结构解析,当前前端为动态渲染表格,直接对接接口数据源可从根源上避免前端改版带来的功能中断
内容的提问来源于stack exchange,提问作者ffspider
相关产品推荐
相关产品推荐

