爬取NBA球员信息并可视化小白入门
创作时间:
作者:
@小白创作中心
爬取NBA球员信息并可视化小白入门
引用
CSDN
1.
https://blog.csdn.net/2302_80243887/article/details/145292458
本文将介绍如何使用Python爬取虎扑体育网站上的NBA球员得分数据,并将其可视化展示。通过这个实战案例,你将学习到网络爬虫的基本流程以及数据可视化的实现方法。
网站分析
网址: 虎扑体育-NBA球员得分数据排行 第1页
步骤:
- 分析页面 确定URL地址
- 模拟浏览器向服务器发送请求
- 数据解析 提取想要的数据
- 保存数据
爬虫所需要的模块:requests(发送HTTP请求) parsel(解析HTML内容) pandas(数据保存模块)
第一步分析页面 --确定是静态页面还是动态页面
右击点击 查看网页源代码 在新窗口中搜索(Ctrl+F)我们所需要的数据
通过分析可得 此网站为静态页面 URL地址为浏览器栏中的地址
接着我们构建基本的爬虫程序 模拟浏览器 向服务器发送请求
因为此网站没有反爬虫机制 基本的浏览器伪装都不需要即可直接获取到数据
# 导包 需要通过pip install 包名下载
import requests
# 发送网络请求的地址
url = 'https://nba.hupu.com/stats/players'
resp = requests.get(url)
# 调用对象里面的属性 获取到返回的文本数据
print(resp.text)
确认爬取下来中的页面数据中有我们所需要的数据
Ctrl+F 快捷键打开搜索框 查看数据
然后提取我们想要的数据 点击元素面板 分析数据所在的结构
分析可得 我们要取tbody下面没有class属性color_font1 bg_a 的tr
#导包 parsel
# 实例化一个浏览器对象
selector = parsel.Selector(resp.text)
# 拿到所有的tr
lis = selector.xpath("//tbody/tr[not(@class='color_font1 bg_a')]")
接着按照元素面板的结构取值 遍历所有的tr
球员: class属性等于left下面的a标签中的文本
球队名字:从根标签中开始写Xpath css不好匹配
得分: class属性等于bg_b的td 中的文本
下面的数据 通过xpath 取 发现是tr标签下5-12个
for li in lis:
name = li.css('.left a::text').get()
team = li.xpath('./td[3]/a/text()').get()
score = li.css('.bg_b::text').get()
hit_shot = li.xpath('./td[5]/text()').get()
hit_rate = li.xpath('./td[6]/text()').get()
hit_three = li.xpath('./td[7]/text()').get()
three_rate = li.xpath('./td[8]/text()').get()
hit_penalty = li.xpath('./td[9]/text()').get()
penalty_rate = li.xpath('./td[10]/text()').get()
session = li.xpath('./td[11]/text()').get()
play_time = li.xpath('./td[12]/text()').get()
print(name, team, score,hit_shot,hit_rate,hit_three,hit_penalty,penalty_rate,session,play_time)
最后保存数据 保存为excel文件
# 使用字典来存储数据
dit = {
'球员': name,
'球队': team,
'得分': score,
'命中-出手': hit_shot,
'命中率': hit_rate,
'命中-三分': hit_three,
'三分命中率': three_rate,
'命中-罚球': hit_penalty,
'罚球命中率': penalty_rate,
'场次': session,
'上场时间': play_time,
}
# 定义一个空列表 将字典数据添加进去
all.append(dit)
导入pandas 模块 保存数据到excel表格中
以下是本次案例的全部代码 供学习交流使用
import requests
import parsel
import pandas as pd
url = 'https://nba.hupu.com/stats/players'
all = []
resp = requests.get(url)
selector = parsel.Selector(resp.text)
lis = selector.xpath("//tbody/tr[not(@class='color_font1 bg_a')]")
for li in lis:
name = li.css('.left a::text').get()
team = li.xpath('./td[3]/a/text()').get()
score = li.css('.bg_b::text').get()
hit_shot = li.xpath('./td[5]/text()').get()
hit_rate = li.xpath('./td[6]/text()').get()
hit_three = li.xpath('./td[7]/text()').get()
three_rate = li.xpath('./td[8]/text()').get()
hit_penalty = li.xpath('./td[9]/text()').get()
penalty_rate = li.xpath('./td[10]/text()').get()
session = li.xpath('./td[11]/text()').get()
play_time = li.xpath('./td[12]/text()').get()
dit = {
'球员': name,
'球队': team,
'得分': score,
'命中-出手': hit_shot,
'命中率': hit_rate,
'命中-三分': hit_three,
'三分命中率': three_rate,
'命中-罚球': hit_penalty,
'罚球命中率': penalty_rate,
'场次': session,
'上场时间': play_time,
}
all.append(dit)
pd.DataFrame(all).to_excel('NBA.xlsx', index=False)
数据可视化板块
数据可视化所需要的模块pandas(数据处理和分析) pyecharts
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Line
df = pd.read_excel('NBA.xlsx',index_col=False)
players = df['球员'].tolist()
scores = df['得分'].tolist()
session = df['场次'].tolist()
# 创建柱状图对象
bar = (
Line()
.add_xaxis(players) # x 轴为球员
.add_yaxis("得分", scores) # y 轴为得分
.add_yaxis("场次",session)
.set_global_opts(
title_opts=opts.TitleOpts(title="球员得分情况柱状图"),
toolbox_opts=opts.ToolboxOpts(is_show=True),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)), # 旋转 x 轴标签,防止重叠
yaxis_opts=opts.AxisOpts(name="得分")
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
)
# 渲染图表到 HTML 文件
bar.render("player_score_bar_chart.html")
热门推荐
未来作曲编曲会因为AI智能编曲的壮大而彻底失业吗
体重管理科学建议20条
关于“焯水”这篇终于讲清楚了,再也不翻车,太实用了!
鼻咽癌术后吃什么食物?恢复期营养与食物选择
人去世后如何处理五险一金?这些处理方法有什么规定?
MBA商学院三大认证 获得MBA认证的学校有哪些
张雪峰解读微电子科学与工程专业:就业前景、考研方向及优劣势分析
2025有哪些华语原创音乐剧值得期待?这份清单请收好
山姆会员店人脸识别政策引争议,已立案!
加油站不给油桶加油是有原因的…对此你怎么看?
PDW偏低可能与骨髓造血功能减退有关
鼻咽癌患者应该如何进行饮食调理,成都普济中医邓文志主任的专业建议
睡莲怎么养不会死
他被称为欧洲贝利!论葡萄牙足球历史第1人时,菲戈C罗都还没出生
爆破线在爆破工程中的关键作用及材质选择
青春痘如何治疗最有效
无人机飞手怎样写好简历的技能特长
适合空腹饮用的茶类详解
8核与6核处理器有何区别?哪个更适合游戏?
刚退休就去世,五险一金谁能继承?遗产继承顺序是怎样的?
社会工程学攻击的防御
腹泻的全面解析:原因、评估与治疗方案
反转的第一意象:权力感如何塑造强硬的外交政策?
“人脸识别”争议再起:山姆超市被诉侵权,“刷脸”的法律边界在哪里?
肠清茶的健益处及其作用机制:一次全面的解析
金矿开采技术的历史演变与发展趋势
高速PCB差分对布线指南:保持信号完整性的关键技巧
香砂六君、补中益气、参苓白术、生脉、六味地黄等常服的身体变化
航班取消或延误?这些赔偿标准要知道
商品牛市的特征及形成原因是什么?这些特征和原因会带来哪些变化?