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("未获取到赛程信息。")