ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

nba_api 完整实战教程:从零上手,用 Python 拿到 NBA 官方数据

nba_api 完整实战教程:从零上手,用 Python 拿到 NBA 官方数据 nba_api 完整实战教程从零上手用 Python 拿到 NBA 官方数据【免费下载链接】nba_apiAn API Client package to access the APIs for NBA.com项目地址: https://gitcode.com/gh_mirrors/nb/nba_api爬网页拿 NBA 数据页面一改版脚本就挂第三方库的数字还对不上官方口径。nba_api 是 NBA.com 官方接口的 Python 客户端直连官方数据源球员生涯数据、球队比赛日志、NBA 实时比分都能取装完 3 分钟跑通第一条查询。 它先能给你什么数据拿数据前先看清楚边界。nba_api 把数据分成三类历史统计、静态参照表、实时比赛共 100 多个查询入口端点。对照这张表30 秒确认你要的东西在不在里面数据类型典型用途对应入口球员生涯数据逐赛季得分、篮板、命中率playercareerstats球队比赛日志逐场胜负、球队各项数据teamgamelogNBA 实时比分今日比赛、比分、进行到哪一节live模块的ScoreBoard联盟排行榜得分、助攻等榜单leagueleaders逐回合数据单场比赛的每个回合playbyplay静态参考数据球员、球队名单和 IDstats/static/前四类历史统计入口都放在 stats/endpoints/ 目录下每个文件对应一个端点类用法一致实例化时传参数再用get_data_frames()拿结果。⚡ 3 分钟快速开始nba_api 安装命令要求 Python 3.9 及以上。装pip install nba_api一行代码验证安装from importlib.metadata import version print(version(nba_api)) # 1.6.1打印出版本号就说明装好了。注意它依赖 requests、numpy 和 pandasget_data_frames()返回的就是 pandas 的 DataFrame。主线演示从球员名字查到生涯数据这是使用 nba_api 最典型的链路一次带你看懂静态数据和端点模块的分工静态模块按名字查 ID。接口只认数字 ID不认名字所以先查 ID。端点模块拿 ID 拉生涯数据。实例化端点类时会立刻发请求。转成 DataFrame 算均值。from nba_api.stats.static import players from nba_api.stats.endpoints import playercareerstats p players.find_players_by_full_name(LeBron James) stats playercareerstats.PlayerCareerStats(player_idp[0][id]) df stats.get_data_frames()[0] print(f赛季数: {len(df)}, 生涯场均: {df[PTS].mean():.1f} 分, {df[REB].mean():.1f} 板)第 4 行就拿到 DataFrame后面的事交给 pandas。另外两类数据这样取静态参考数据球员和球队的 ID 表stats/static/ 提供球员表和球队表返回的是字典列表字段有id、full_name、nickname等。这类名单一个赛季才变一次适合拉一次后存到本地。from nba_api.stats.static import teams lakers teams.find_teams_by_full_name(Los Angeles Lakers) print(lakers[0][id], lakers[0][full_name])拿到球队 ID 后就能喂给TeamGameLog这类端点from nba_api.stats.endpoints import teamgamelog log teamgamelog.TeamGameLog(team_idlakers[0][id], season2022-23) games log.get_data_frames()[0]NBA 实时比分ScoreBoard 拿今日比赛实时数据在 live 模块ScoreBoard不需要任何参数返回今天全部比赛get_dict()拿到原始 JSON。from nba_api.live.nba.endpoints import scoreboard games scoreboard.ScoreBoard().get_dict()[games] for g in games: print(g[gameStatusText], g[awayTeam][score], -, g[homeTeam][score])gameStatusText告诉你比赛是未开始、进行中还是已结束要更细的实时技术统计同目录下还有boxscore和playbyplay两个端点。上生产前看这里限流、缓存、重试把脚本挂到服务器定时跑之前先记下三条经验限流官方接口没有公开明确的速率上限但短时间连发几十个请求会被风控连续请求之间time.sleep(0.5)是最省心的做法。缓存赛季结束后生涯类数据不会再变用pickle把 DataFrame 存盘下次直接读文件别重复请求。重试网络超时是高频异常把请求包一层重试函数import time from requests.exceptions import RequestException def fetch(fn, retries3, wait2): for i in range(retries): try: return fn() except RequestException: if i retries - 1: raise time.sleep(wait)常见问题Python 获取 NBA 数据的 3 个高频疑问怎么查球员的 IDplayers.find_players_by_full_name(Curry)支持模糊匹配返回字典列表取[0][id]即可重名时看full_name逐个核对。端点返回空数据多半是哪里错了八成是season或season_type_all_star传错。赛季格式固定为2022-23赛季类型要写全Regular Season这类字符串另外确认该球员在目标赛季是否还在役。需要走代理怎么办每个端点的构造函数都带proxy参数直接传127.0.0.1:7890这样的地址就行。写在最后nba_api 把 NBA.com 官方接口包成了 100 多个端点类加 3 类数据模块Python 获取 NBA 数据不用碰 HTML 和 JSON 细节查 ID、实例化端点、拿 DataFrame三步走完。更多端点参数说明见 docs 文档源码结构可以直接翻src/nba_api/对照本文示例。【免费下载链接】nba_apiAn API Client package to access the APIs for NBA.com项目地址: https://gitcode.com/gh_mirrors/nb/nba_api创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进