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

Python实例题:Python获取NBA数据

目录

Python实例题

题目

方式一:使用网页爬虫获取数据

代码解释

get_nba_schedule 函数:

主程序:

方式二:使用专业 API 获取数据

代码解释

运行思路

方式一

方式二

注意事项

以下是完整的 doubaocanvas 代码块:

get_nba_schedule.py

get_nba_player_data.py

Python实例题

题目

Python获取NBA数据

方式一:使用网页爬虫获取数据

以从虎扑体育获取 NBA 比赛赛程数据为例,我们会用到 requests 库发送 HTTP 请求,BeautifulSoup 库解析 HTML 内容。

import requests
from bs4 import BeautifulSoup
import timedef get_nba_schedule():url = 'https://nba.hupu.com/schedule'headers = {'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}try:response = requests.get(url, headers=headers)response.raise_for_status()response.encoding = response.apparent_encodingsoup = BeautifulSoup(response.text, 'html.parser')schedule_list = []# 查找赛程信息的 HTML 元素,需根据实际网页结构调整schedule_items = soup.find_all('div', class_='list_box')for item in schedule_items:try:date = item.find('div', class_='title').text.strip()games = item.find_all('li')for game in games:home_team = game.find_all('span')[0].text.strip()away_team = game.find_all('span')[2].text.strip()score = game.find('span', class_='gameresult').text.strip()schedule_info = {'date': date,'home_team': home_team,'away_team': away_team,'score': score}schedule_list.append(schedule_info)except AttributeError:continuereturn schedule_listexcept requests.RequestException as e:print(f"请求出错: {e}")return []if __name__ == "__main__":schedule = get_nba_schedule()if schedule:for info in schedule:print(f"日期: {info['date']}")print(f"主队: {info['home_team']}")print(f"客队: {info['away_team']}")print(f"比分: {info['score']}")print("-" * 30)else:print("未获取到赛程信息。")

代码解释

  • 请求头设置:设置 User - Agent 模拟浏览器行为,降低被反爬机制拦截的可能性。
  • get_nba_schedule 函数

    • 发送 HTTP 请求获取网页内容。
    • 使用 BeautifulSoup 解析 HTML,查找赛程信息的 HTML 元素。
    • 提取比赛日期、主队、客队和比分信息,存储在字典中并添加到列表。
    • 处理请求异常。
  • 主程序

    • 调用函数获取赛程信息并打印。

方式二:使用专业 API 获取数据

以使用 sportsipy 库获取 NBA 球员数据为例,sportsipy 是一个用于获取体育数据的 Python 库。

from sportsipy.nba.teams import Teams
from sportsipy.nba.roster import Player# 获取所有球队信息
teams = Teams()
for team in teams:print(f"球队名称: {team.name}")roster = team.rosterfor player in roster.players:try:player_data = Player(player.player_id)print(f"球员姓名: {player_data.name}")print(f"球员得分: {player_data.points_per_game}")print("-" * 30)except Exception as e:print(f"获取球员 {player.player_id} 数据时出错: {e}")print("=" * 50)

代码解释

  • 导入必要的类:从 sportsipy.nba 导入 Teams 和 Player 类。
  • 获取球队信息:使用 Teams() 获取所有 NBA 球队信息。
  • 遍历球队和球员:遍历每个球队的球员列表,使用 Player 类获取球员详细数据,如得分等。
  • 异常处理:处理获取球员数据时可能出现的异常。

运行思路

方式一

  • 安装依赖库:
pip install requests beautifulsoup4
  • 保存代码为 .py 文件并运行。

方式二

  • 安装 sportsipy 库:
pip install sportsipy
  • 保存代码为 .py 文件并运行。

注意事项

  • 网页爬虫:网站有反爬机制,可能需要处理验证码、IP 封禁等问题,同时要遵守网站的 robots.txt 规则。
  • API 使用:使用第三方 API 时,要注意 API 的使用限制和费用问题。

以下是完整的 doubaocanvas 代码块:

get_nba_schedule.py

from sportsipy.nba.teams import Teams
from sportsipy.nba.roster import Player# 获取所有球队信息
teams = Teams()
for team in teams:print(f"球队名称: {team.name}")roster = team.rosterfor player in roster.players:try:player_data = Player(player.player_id)print(f"球员姓名: {player_data.name}")print(f"球员得分: {player_data.points_per_game}")print("-" * 30)except Exception as e:print(f"获取球员 {player.player_id} 数据时出错: {e}")print("=" * 50)

get_nba_player_data.py

import requests
from bs4 import BeautifulSoup
import timedef get_nba_schedule():url = 'https://nba.hupu.com/schedule'headers = {'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}try:response = requests.get(url, headers=headers)response.raise_for_status()response.encoding = response.apparent_encodingsoup = BeautifulSoup(response.text, 'html.parser')schedule_list = []# 查找赛程信息的 HTML 元素,需根据实际网页结构调整schedule_items = soup.find_all('div', class_='list_box')for item in schedule_items:try:date = item.find('div', class_='title').text.strip()games = item.find_all('li')for game in games:home_team = game.find_all('span')[0].text.strip()away_team = game.find_all('span')[2].text.strip()score = game.find('span', class_='gameresult').text.strip()schedule_info = {'date': date,'home_team': home_team,'away_team': away_team,'score': score}schedule_list.append(schedule_info)except AttributeError:continuereturn schedule_listexcept requests.RequestException as e:print(f"请求出错: {e}")return []if __name__ == "__main__":schedule = get_nba_schedule()if schedule:for info in schedule:print(f"日期: {info['date']}")print(f"主队: {info['home_team']}")print(f"客队: {info['away_team']}")print(f"比分: {info['score']}")print("-" * 30)else:print("未获取到赛程信息。")

相关文章:

  • DELL EMC Power Edge:如何使用 System Setup 菜单在 RAID 控制器中导入外部配置
  • Shell-流程控制-判断
  • StampLock的源码详细剖析
  • 具身系列——Double DQN算法实现CartPole游戏(强化学习)
  • 永磁同步电机控制算法--基于PI的位置伺服控制
  • STM32智能垃圾桶:四种控制模式实战开发
  • axi总线粗略学习
  • 方案精读:110页华为云数据中心解决方案技术方案【附全文阅读】
  • 【Trae+LucidCoder】三分钟编写专业Dashboard页面
  • 35、C# 中的反射(Reflection)
  • C++类与对象—下:夯实面向对象编程的阶梯
  • Python之学习笔记(六)
  • 统计 三个工作日内到期的数据
  • 【多线程】八、线程池
  • TS 字面量类型
  • [2025]MySQL的事务机制是什么样的?redolog,undolog、binog三种日志的区别?二阶段提交是什么?ACID怎么保证的?主从复制的过程?
  • Jasper and Stella: distillation of SOTA embedding models
  • Solr 与 传统数据库的核心区别
  • 学习黑客Linux 命令
  • Django框架介绍+安装
  • 铁路上海站迎五一返程客流最高峰,今日预计到达75.9万人次
  • 上海成五一国内最热门的入境游目的地,国际消费明显提升
  • 河南博物院:警惕非官方网络平台 “买讲解保进馆” 等虚假信息
  • 研究完蚂蚁搬家,我好像明白了为什么我们总是堵车
  • 长三角铁路今日预计发送418万人次,持续迎来出行客流高峰
  • 陈逸飞《黄河颂》人物造型与借鉴影像意义