NBA球员数据爬取可视化展示(Python爬虫+spring-boot的前后端分离+echarts数据可视化)

资源下载地址:https://download.csdn.net/download/sheziqiong/88483386
资源下载地址:https://download.csdn.net/download/sheziqiong/88483386

Python爬虫+spring-boot的前后端分离+echarts数据可视化

开发环境:
1、后端开发:PyCharm + idea
2、前端开发:Hbuilder

使用技术:
1、后端:spring-boot + Python
2、前端:echarts

该项目旨在通过Python爬虫技术、Spring Boot前后端分离框架和ECharts数据可视化工具,实现NBA球员数据的爬取、可视化和展示。首先,使用Python爬虫技术从NBA官方网站或其他数据源获取球员数据。然后,使用Spring Boot构建后端应用程序,处理数据并将其提供给前端。最后,使用ECharts在前端展示数据可视化图表,以便用户可以直观地查看和分析球员数据。该项目可以帮助篮球爱好者更好地了解和分析球员的表现,同时提供了一个展示现代Web应用程序开发技术的示例。

一、数据爬取

 import requests
 from bs4 import BeautifulSoup
 import pymysql  # 引用库
 import parsel
 ​
 print('连接到mysql服务器……')
 db = pymysql.connect(host='localhost',
                      port=3306,
                      user='root',
                      passwd='123456',
                      db='python',
                      charset='utf8')
 # host 主机名,port 端口,user 数据库用户名,password 数据库root用户的密码,db 数据库名
 print("连接上了!")
 ​
 # 创建游标(远程操作mysql)
 cursor = db.cursor()
 ​
 cursor.execute("DROP TABLE IF EXISTS nba_player")
 ​
 sql = """CREATE TABLE `nba_player` (
               `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
               `ranks` int DEFAULT NULL COMMENT '排名',
               `player` varchar(255) DEFAULT NULL COMMENT '球员名称',
               `team` varchar(255) DEFAULT NULL COMMENT '球队',
               `score` float DEFAULT NULL COMMENT '得分',
               `hit_shot` varchar(255) DEFAULT NULL COMMENT '命中出手',
               `hit_rate` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '命中率',
               `hit_three` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '命中-三分',
               `three_rate` varchar(255) DEFAULT NULL COMMENT '三分命中率',
               `hit_penalty` varchar(255) DEFAULT NULL COMMENT '命中-罚球',
               `penalty_rate` varchar(255) DEFAULT NULL COMMENT '罚球命中率',
               `session` int DEFAULT NULL COMMENT '场次',
               `playing_time` float DEFAULT NULL COMMENT '上场时间',
               PRIMARY KEY (`id`)
             )
         """
 cursor.execute(sql)
 ​
 # 正确的url地址 分析网页(伪装)
 headers = {
     'User-Agent':
         'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
 }
 # 爬取的链接
 url = "https://nba.hupu.com/stats/players"
 ​
 # 2.发送网络请求, request(css/re/requests)
 response = requests.get(url=url, headers=headers)
 ​
 response.encoding = "utf-8"
 ​
 html_data = response.text
 # 3.数据解析(进行数据的筛选)
 #  3.1转换数据类型
 selector = parsel.Selector(html_data)
 ​
 trs = selector.xpath('//tbody/tr[not(@class="color_font1 bg_a")]')
 i = 1
 for tr in trs:
     id = i
     i += 1
     rank = tr.xpath('./td[1]/text()').get()  # 排名
     player = tr.xpath('./td[2]/a/text()').get()  # 球员
     team = tr.xpath('./td[3]/a/text()').get()  # 球队
     score = tr.xpath('./td[4]/text()').get()  # 得分
     hit_shot = tr.xpath('./td[5]/text()').get()  # 命中-出手
     hit_rate = tr.xpath('./td[6]/text()').get() # 命中率
     hit_three = tr.xpath('./td[7]/text()').get()  # 命中-三分
     three_rate = tr.xpath('./td[8]/text()').get()  # 三分命中率
     hit_penalty = tr.xpath('./td[9]/text()').get()  # 命中-罚球
     penalty_rate = tr.xpath('./td[10]/text()').get()  # 罚球命中率
     session = tr.xpath('./td[11]/text()').get()  # 场次
     playing_time = tr.xpath('./td[12]/text()').get()  # 上场时间
     insert = ("INSERT INTO `nba_player` VALUES (%s,%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)")
     data = (
         id, rank, player, team, score, hit_shot, hit_rate, hit_three, three_rate, hit_penalty, penalty_rate, session,
         playing_time)
     print(data)
     cursor.execute(insert, data)
     db.commit()
     print(rank, player, team, score, hit_shot, hit_rate, hit_three,
           three_rate, hit_penalty, penalty_rate, session, playing_time)
 ​
 del i
 ​
 print("爬取数据完成,存入数据库……")
 ​
 cursor.close()

二、爬取的地址以及数据如下图所示:

在这里插入图片描述

三、爬取的数据如下

在这里插入图片描述

四、接口

@RestController
@RequestMapping("/player")
public class NbaPlayerController {

@RequestMapping("/rankingList")
public List<NbaPlayer> getRankingList() {
    QueryWrapper queryWrapper = new QueryWrapper<>();
    queryWrapper.last("limit 10");
    List<NbaPlayer> nbaPlayers = nbaPlayerMapper.selectList(queryWrapper);
    return nbaPlayers;
	}
}

五、前端通过get方式请求数据库中的数据(部分示例)
var ec_left1 = echarts.init(document.getElementById("l1"), "dark")

$.get('http://localhost:8080/player/list', function (res) {
    var names = []
    var nums = []
    for (var i = 0; i < res.length; i++) {
        names.push(res[i].player);
        nums.push(res[i].session);
    }
    ec_left1.setOption({
        textStyle: {
            color: 'white'
        },
        title: {
            text: 'NBA球员出场次数',
            left: "auto"
        },
        tooltip: {
            trigger: 'axis'
        },
        legend: {
            data: ['出场数']

        },
        grid: {
            left: '3%',
            right: '4%',
            bottom: '3%',
            containLabel: true
        },
        toolbox: {
            feature: {
                saveAsImage: {}
            }
        },
        xAxis: {
            type: 'category',
            boundaryGap: false,
            data: names
        },
        yAxis: {
            type: 'value'
        },
        series: [
            {
                name: '出场数',
                type: 'line',
                stack: '总量',
                data: nums
            }
        ]
    })
})

最终效果截图:
在这里插入图片描述
资源下载地址:https://download.csdn.net/download/sheziqiong/88483386
资源下载地址:https://download.csdn.net/download/sheziqiong/88483386

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shejizuopin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值