爬取NBA球员信息并可视化小白入门

网址: 虎扑体育-NBA球员得分数据排行 第1页

步骤:

  1. 分析页面 确定URL地址
  2. 模拟浏览器向服务器发送请求
  3. 数据解析 提取想要的数据
  4. 保存数据

|--------------------------|------------------------|
| requests(发送HTTP请求) | parsel(解析HTML内容) |
| pandas(数据保存模块) | |
[爬虫所需要的模块]

***第一步分析页面 --确定是静态页面还是动态页面

右击点击 查看网页源代码 在新窗口中搜索(Ctrl+F)我们所需要的数据***

通过分析可得 此网站为静态页面 URL地址为浏览器栏中的地址

接着我们构建基本的爬虫程序 模拟浏览器 向服务器发送请求

因为此网站没有反爬虫机制 基本的浏览器伪装都不需要即可直接获取到数据

python 复制代码
# 导包  需要通过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

python 复制代码
#导包 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个

python 复制代码
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文件

python 复制代码
# 使用字典来存储数据    
dit = {
        '球员': name,
        '球队': team,
        '得分': score,
        '命中-出手': hit_shot,
        '命中率': hit_rate,
        '命中-三分': hit_three,
        '三分命中率': three_rate,
        '命中-罚球': hit_penalty,
        '罚球命中率': penalty_rate,
        '场次': session,
        '上场时间': play_time,
    }
# 定义一个空列表 将字典数据添加进去
all.append(dit)

导入pandas 模块 保存数据到excel表格中
以下是本次案例的全部代码 供学习交流使用

python 复制代码
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 |
[数据可视化所需要的模块]

python 复制代码
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")
相关推荐
赴3358 分钟前
逻辑回归算法基础介绍,简单的二分类三分类实例
人工智能·python·机器学习·逻辑回归·sklearn·分类算法
计算机毕设定制辅导-无忧学长1 小时前
InfluxDB 与 Python 框架结合:Django 应用案例(二)
python·django·sqlite
我就是全世界1 小时前
ClickHouse vs PostgreSQL:数据分析领域的王者之争,谁更胜一筹?
clickhouse·postgresql·数据分析
java1234_小锋1 小时前
[免费]基于Python的招聘职位信息推荐系统(猎聘网数据分析与可视化)(Django+requests库)【论文+源码+SQL脚本】
python·数据分析·django·python招聘系统·django招聘
杨超越luckly2 小时前
HTML应用指南:利用GET请求获取全国小米之家门店位置信息
前端·arcgis·html·数据可视化·shp
im_AMBER2 小时前
学习日志23 python
python·学习
生信大杂烩2 小时前
基于成像空间转录组技术的肿瘤亚克隆CNV原位推断方法
python·数据分析
IT项目分享2 小时前
Python字典完全指南:从基础到实战(2025版)
开发语言·python·it项目网
workflower2 小时前
AI IDE+AI 辅助编程-生成的大纲-一般般
ide·人工智能·数据分析·软件工程·需求分析
这里有鱼汤3 小时前
全网最通俗易懂的趋势判断神器:卡尔曼滤波原来这么实用!
后端·python·程序员