1、项目介绍

技术栈:
python语言、Flask框架、Echarts可视化、MySQL数据库、HTML、豆瓣音乐、requests爬虫技术

编程语言:Python,以其强大的数据处理能力和丰富的库资源,成为本系统的核心编程工具。
Web框架:Flask,作为轻量级的Web框架,为系统提供了简洁而高效的API服务。
数据可视化:Echarts,以其丰富的图表类型和强大的交互功能,为用户呈现直观的数据分析结果。
数据库管理:MySQL,用于存储和管理豆瓣音乐数据,保障数据的完整性和高效查询。
前端技术:HTML/CSS/JavaScript,构建用户友好的界面,提供流畅的交互体验。
数据抓取:requests爬虫技术,从豆瓣音乐平台获取数据,为系统提供丰富的数据源。

2、项目界面

(1)不同专辑类型数据分析

在这里插入图片描述

(2)音乐评分排名柱状图分析

在这里插入图片描述

(3)评分与评价人数散点图分析
在这里插入图片描述

(4)音乐发布趋势折线图分析

在这里插入图片描述

(5)音乐类型占比分析

在这里插入图片描述

(6)音乐专辑类型占比top10分析
在这里插入图片描述

(7)音乐作者发布作品数量top5
在这里插入图片描述

(8)音乐名称词云图分析
在这里插入图片描述

(9)首页

在这里插入图片描述

(10)注册登录

在这里插入图片描述

(11)数据采集
在这里插入图片描述

3、项目说明

(1)技术基础:

编程语言:Python,以其强大的数据处理能力和丰富的库资源,成为本系统的核心编程工具。
Web框架:Flask,作为轻量级的Web框架,为系统提供了简洁而高效的API服务。
数据可视化:Echarts,以其丰富的图表类型和强大的交互功能,为用户呈现直观的数据分析结果。
数据库管理:MySQL,用于存储和管理豆瓣音乐数据,保障数据的完整性和高效查询。
前端技术:HTML/CSS/JavaScript,构建用户友好的界面,提供流畅的交互体验。
数据抓取:requests爬虫技术,从豆瓣音乐平台获取数据,为系统提供丰富的数据源。

(2)功能模块:

1、不同专辑类型数据分析:
分析并展示不同专辑类型(如录音室专辑、现场专辑等)的数据分布和趋势。
通过图表展示各类型专辑的受欢迎程度和用户评价。
2、音乐评分排名柱状图分析:
根据豆瓣音乐的评分,对音乐作品进行排名,并通过柱状图展示。
用户可查看高评分音乐的详细信息,了解市场热门作品。
3、评分与评价人数散点图分析:
绘制评分与评价人数的散点图,揭示音乐作品评分与评价人数之间的相关性。
为用户提供音乐作品受欢迎程度和质量的直观感受。
4、音乐发布趋势折线图分析:
统计并展示音乐作品的发布时间趋势,通过折线图呈现。
分析音乐市场的季节性变化和用户偏好变化。
5、音乐类型占比分析:
分析并展示不同音乐类型(如流行、摇滚、古典等)的占比情况。
揭示市场主流音乐类型和潜在的音乐趋势。
6、音乐专辑类型占比top10分析:
列出并展示音乐专辑类型的前十名占比情况。
为用户推荐热门和受欢迎的专辑类型。
7、音乐作者发布作品数量top5:
列出并展示发布作品数量最多的前五名音乐作者。
揭示市场活跃的音乐创作者和他们的作品影响力。
8、音乐名称词云图分析:
使用词云图展示热门音乐名称和关键词,揭示用户关注的音乐热点。
为用户提供音乐推荐和搜索的灵感。
9、注册登录:
提供用户注册和登录功能,保障用户数据的安全性和隐私性。
注册用户可享受更多个性化服务和数据分析结果。
10、数据采集:
提供数据采集功能,允许用户从豆瓣音乐平台抓取数据并导入系统。
支持定期自动采集和手动触发采集,确保数据的实时性和准确性。

(3)系统特点:

提供全面的豆瓣音乐数据分析功能,帮助用户深入了解音乐市场和用户偏好。
结合Echarts实现数据可视化,提高数据可读性和用户体验。
支持用户注册和登录,保护用户隐私和数据安全。
采用Flask框架和MySQL数据库,构建高效、稳定、可扩展的系统架构。
通过requests爬虫技术,实现豆瓣音乐数据的实时抓取和更新。

4、核心代码

from flask import Flask as _Flask, redirect, url_for
from json import JSONEncoder
import utils
import pymysql
from flask import session
from flask import render_template
from flask import flash
from flask import request



class MyEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, set):
            return list(obj)
        return JSONEncoder.default(self, obj)


class Flask(_Flask):
    json_encoder = JSONEncoder


app = Flask(__name__)
app.secret_key = 'ASDfDjikdJjijfff'
db = pymysql.connect(host='localhost', user='root', password='123456', database='music')

# 获取服务器时间
@app.route('/time')
def get_time():
    return utils.get_time()

# 系统默认路径前台跳转
@app.route('/')
def main_page():
    return render_template("login.html")


# 登录
@app.route('/login', methods=['POST'])
def login():
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        if not all([username, password]):
            flash('参数不完整')
            return "300"
        res = utils.get_user(username, password)
        if res and res[0][0] > 0:
            session['is_login'] = True
            session['role'] = res[0][1]
            session['username'] = res[0][1]
            return "200"
        else:
            return "300"

# 登录页面跳转
@app.route('/admin')
def admin():
    if session.get("is_login"):
        if session.get('role') == 0:
            return render_template('index.html')
        else:
            return render_template('index.html')
    else:
        return render_template('login.html')


@app.route('/logout')
def logout():
    try:
        session.pop("is_login")
        return render_template('login.html')
    except Exception:
        return render_template('login.html')


# 后台注册跳转
@app.route('/html/reg')
def html_reg():
    return render_template('reg.html')


# 注册用户数据
@app.route('/user/reg', methods=["POST"])
def user_reg():
    get_data = request.form.to_dict()
    username = str(get_data.get('username'))
    nickname = str(get_data.get('account'))
    password = str(get_data.get('password'))
    name = '用户'
    phone = " "
    mail = " "
    return utils.add_user(username, nickname, name, password, phone, mail)

@app.route("/index")
def root():
    return render_template("index.html")


@app.route('/html/welcome')
def welcome():
    res = utils.get_info(session['username'])
    user_info_dict = {
        "nickname": "",
        "info": "",
        "sex": "",
        "birthday": "",
        "ip": ""
    }
    user_info = []
    for item in res:
        user_info_dict["nickname"] = item[0]
        user_info_dict["info"] = item[1]
        user_info_dict["sex"] = item[2]
        user_info_dict["birthday"] = item[3]
        user_info_dict['ip'] = item[4]
        nickname = item[0]
    user_info.append(user_info_dict)

    return render_template('html/welcome.html', users=user_info, nickname=nickname)

# 后台首页面跳转
@app.route('/html/welcome_detail')
def welcome_detail():
    res = utils.get_info(session['username'])
    for item in res:
        nickname = item[0]
    return render_template('html/welcome_detail.html', nickname=nickname)


@app.route('/html/detal_edit', methods=['GET', 'POST'])
def edit():
    res = utils.get_info(session['username'])
    for item in res:
        nickname = item[0]
    if request.method == 'POST':
        ip = request.form['ip']
        nickname = request.form['nickname']
        description = request.form['description']
        gender = request.form['gender']
        birthday = request.form['birthday']

        if gender == "male":
            gender = "男"
        else:
            gender = "女"
        # 连接到数据库并插入数据
        utils.update_info(session['username'], nickname, description, gender, birthday, ip)

        return redirect(url_for('welcome'))
    return render_template('html/welcome_detail.html', nickname=nickname)

@app.route("/a")
def a():
    return render_template("不同专辑类型的销量和受欢迎程度Top5.html")

@app.route("/b")
def b():
    return render_template("评分排名Top5.html")

@app.route("/c")
def c():
    return render_template("评分与评价人数散点图.html")

@app.route("/d")
def d():
    return render_template("音乐发布趋势.html")

@app.route("/e")
def e():
    return render_template("音乐类型占比Top5.html")

@app.route("/f")
def f():
    return render_template("专辑类型占比Top10饼图.html")

@app.route("/g")
def g():
    return render_template("作者发布作品数量Top5.html")

@app.route("/h")
def h():
    return render_template("音乐名称词云图.html")



if __name__ == '__main__':
    # 端口号设置
    app.run(host="127.0.0.1", port=5000)




5、源码获取方式

🍅🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐