当前位置: 首页 > news >正文

Excel爬取NBA球队数据实战:从URL分析到Power Query自动化处理

Excel自动化爬取NBA球队数据:从URL解析到Power Query实战指南

NBA数据分析已成为体育商业决策的重要支撑,而Excel作为最普及的数据处理工具,结合Power Query的自动化爬取能力,能帮助分析师高效获取结构化球队数据。本文将手把手教你如何绕过传统复制粘贴,直接通过URL规律分析和M函数编写实现批量数据采集。

1. 环境准备与URL结构解析

在开始爬取前,我们需要先理解目标网站的数据组织逻辑。以stat-nba.com为例,该网站采用RESTful风格的URL设计,不同球队和赛季的数据通过参数化URL区分:

http://www.stat-nba.com/team/stat_box_team.php?team=CHI&season=2018&col=pts&order=1&isseason=1

关键参数解析:

  • team:球队缩写(如CHI代表公牛)
  • season:赛季年份
  • col:排序字段(pts表示按得分排序)
  • order:排序方向(1为降序)
  • isseason:是否常规赛数据

球队缩写对照表

球队全称缩写示例URL片段
亚特兰大老鹰ATLteam=ATL
芝加哥公牛CHIteam=CHI
布鲁克林篮网BKNteam=BKN
金州勇士GSWteam=GSW

提示:可通过网站源代码或API文档获取完整的球队编码列表,建议先在Excel中建立对照表。

2. Power Query基础配置

2.1 数据源表格构建

首先在Excel工作表中构建基础参数表:

  1. 创建名为TeamParams的表格,包含三列:

    • TeamName:球队全称
    • TeamCode:球队缩写
    • Season:赛季年份(如2018)
  2. 录入至少5支球队的3个赛季数据,例如:

TeamNameTeamCodeSeason
芝加哥公牛CHI2018
洛杉矶湖人LAL2019
迈阿密热火MIA2020

2.2 Power Query编辑器入门

  1. 选中表格区域 → 点击「数据」选项卡 →「从表格/范围」
  2. 在Power Query编辑器中:
    • 确认自动生成的步骤
    • 检查各列数据类型(确保Season为文本)
// 手动调整数据类型的M语言代码 = Table.TransformColumnTypes(Source, {{"Season", type text}})

3. 动态URL构建与数据抓取

3.1 自定义URL列

在Power Query中添加自定义列构建完整URL:

  1. 点击「添加列」→「自定义列」
  2. 输入列名"TeamURL"
  3. 使用以下公式拼接URL:
= "http://www.stat-nba.com/team/stat_box_team.php?team=" & [TeamCode] & "&season=" & [Season] & "&col=pts&order=1&isseason=1"

3.2 核心爬取函数实现

新建自定义函数GetNBAData实现数据抓取:

(url as text) as table => let Source = Web.Contents(url), BinaryToText = Text.FromBinary(Source, 65001), // UTF-8编码转换 HtmlData = Web.Page(BinaryToText), DataTable = HtmlData{0}[Data] in DataTable

关键组件解析:

  • Web.Contents:获取网页二进制数据
  • Text.FromBinary:编码转换(65001对应UTF-8)
  • Web.Page:解析HTML文档
  • {0}[Data]:提取第一个表格数据

注意:部分网站可能有反爬机制,建议添加延迟参数和自定义请求头

4. 批量处理与数据清洗

4.1 调用自定义函数

  1. 回到主查询 → 添加自定义列
  2. 输入列名"TeamStats"
  3. 调用函数获取数据:
= GetNBAData([TeamURL])

4.2 数据展开与清洗

  1. 点击TeamStats列的展开按钮
  2. 选择需要的字段(如球员姓名、得分、篮板等)
  3. 执行关键清洗步骤:
= Table.TransformColumns(#"展开的TeamStats", {{"得分", each try Number.From(_) otherwise null}})

常见问题处理:

  • 编码错误:检查Text.FromBinary的编码参数
  • 空值处理:添加错误捕获机制
  • 分页数据:分析翻页URL规律构建循环

5. 高级技巧与性能优化

5.1 并行抓取配置

通过List.Generate实现并发请求:

= List.Generate( () => 0, each _ < List.Count(TeamList), each _ + 1, each GetNBAData(TeamList{_}))

5.2 增量刷新设置

  1. 创建参数表记录最后更新时间
  2. 修改查询添加时间过滤:
= Table.SelectRows(Source, each [UpdateTime] > LastRefreshTime)

5.3 错误日志记录

添加错误处理列监控抓取状态:

= try GetNBAData([TeamURL]) otherwise "Error: " & Error.Record([TeamURL])

6. 自动化部署方案

6.1 定时刷新配置

  1. 文件 → 选项 → 信任中心 → 信任中心设置
  2. 启用「后台数据刷新」并设置间隔(如每6小时)

6.2 数据模型发布

  1. 将处理后的数据加载到Power Pivot
  2. 建立与球队维度表的关联
  3. 发布到Power BI Service实现云端自动更新

实际项目中,我曾用这套方法构建了包含30支球队近10年数据的自动化看板,相比手动收集效率提升约20倍。最关键的是发现URL参数规律后,通过TeamCode和Season的笛卡尔积可以轻松扩展数据范围。

http://www.cnnetsun.cn/news/1447082.html

相关文章:

  • ustd嵌入式C++轻量容器库:零堆分配、确定性实时的数组/队列/哈希表实现
  • MongoDB数据迁移全攻略:从导出到导入的完整流程解析
  • OpenCore Legacy Patcher深度指南:让旧Mac重获新生的技术实践
  • OpCore Simplify:重新定义黑苹果EFI配置的智能化工具
  • python+flask+vue3的电影订票购票系统的设计与实现
  • Ubuntu 下编译安装 GDAL C++库的完整指南
  • nlp_structbert_sentence-similarity_chinese-large科研辅助:LaTeX论文写作中的相关文献智能推荐
  • Super Qwen多模态交互展示:语音+视觉的增强现实应用
  • 声发射传感器如何通过压电效应实现应力波检测?
  • 从SiamFC到SiamRPN++:孪生网络目标跟踪算法演进与实战解析
  • OpenClaw对接nanobot全流程:从镜像部署到QQ机器人配置
  • YOLOE官版镜像实操案例:YOLOE-v8s模型在Jetson Orin上的边缘部署
  • Quartus II 13.1 保姆级教程:手把手教你从零搭建四选一多路选择器(附完整仿真流程)
  • 深入解析TCC(Tiny C Compiler)源代码:从编译原理到实践应用
  • PixiJS性能优化指南:如何让你的2D游戏流畅运行60FPS
  • 老电脑救星:实测Cent浏览器比Chrome省32%内存(附详细安装配置指南)
  • 深入eMMC安全机制:图解RPMB防篡改存储的工作原理与消息协议解析
  • Chatbot Arena与LMArena技术对比:核心差异与选型指南
  • 别再乱改WSL2主机名了!Ubuntu 22.04下修改hostname的正确姿势(附sudo报错解决)
  • 猜数字游戏:写完这个,我终于理解了if/else和循环
  • 云容笔谈国风IP孵化:从单张人像生成到虚拟偶像全生命周期管理方案
  • RTX5 | 配置文件RTX_Config.h(二):线程配置实战与避坑指南
  • 不同权重变化下的全面粒子群算法“[1][2][3
  • OpenClaw硬件监控:Qwen3.5-4B-Claude实现设备温度异常预警
  • abaqus二次开发各向异性相场模型,求解复合材料单层板不同纤维铺层角度下的断裂
  • OpCore-Simplify:黑苹果配置的智能导航革命
  • 从Gemini CLI到Antigravity:揭秘谷歌AI生态的开发者工具链
  • ESP32定时器中断里千万别用Serial.print!一个标志位解决无限重启(附完整代码)
  • StructBERT模型一键部署至VMware虚拟机:本地开发测试环境搭建
  • 别再为跨时钟域头疼了!手把手教你用Verilog实现一个参数化异步FIFO(附完整代码)