基于Flask+Vue的豆瓣音乐分析与推荐系统
一、介绍
本项目基于 Python 编写网络爬虫,从豆瓣音乐网抓取 Top250 音乐及各分类音乐的相关信息,并对数据进行清洗与结构化处理。
结合百度开源的 Senta 框架,对用户评论文本进行情感分析,并将分析结果存储至 MySQL 数据库中。
在前端,采用 Vue3 构建可视化 Web 系统,对音乐的评分、表演者、流派等多维度信息进行综合分析,挖掘影响评分高低的关键因素。
同时,系统引入基于物品的协同过滤(ItemCF)推荐算法,为用户个性化推荐感兴趣的音乐。通过可视化图表直观展示音乐数据,实现数据驱动的推荐与分析。
二、软件架构
技术栈:
- 后端:python、flask ;
- 前端:vue、element ui、echarts
- 数据库: MySql8.x
系统亮点:
Senta 框架情感分析,协同过滤(ItemCF)推荐算法,在线实时爬取、日志监控、日志实时刷新、vue3
系统角色:
系统分为管理员和普通用户角色。管理员相对于用户,拥有数据爬取、用户管理功能的权限。
流程:
这是一个基于Flask和Vue.js构建的Web系统,用户在前端界面进行操作,产生HTTP请求发送至服务器。Flask框架接收到这些请求并创建对应的请求对象。然后,Flask根据路由配置找到匹配的视图函数,执行该函数以处理请求。 在视图函数中,与MySQL数据库进行交互,执行数据的查询、插入、更新或删除等操作,以完成用户的请求。处理完成后,视图函数会构造一个响应对象,这个响应对象包含了要返回给用户的数据。 接着,Flask将响应对象转换为HTTP响应,通过客户端的浏览器呈现结果。在这个过程中,前端使用Vue.js框架来提升用户界面的交互性和动态内容展示,可能还会用ECharts图表库来呈现数据可视化。 整个流程如下:
- 用户在前端界面(由Vue.js构建)上进行操作。
- 前端界面发送HTTP请求至服务器。
- Flask框架接收请求并创建请求对象。
- 根据路由,Flask查找并调用对应的视图函数。
- 视图函数与MySQL数据库进行交互(假如需要)。
- 视图函数处理完请求后,创建一个响应对象。
- Flask将响应对象转换为HTTP响应并返回给客户端。
- 客户端浏览器接收响应,并由Vue.js动态渲染页面内容和ECharts图表。
三、系统功能

1、首页
首页展示了系统中爬取到的音乐信息。用户可以根据数据类型、名称、表演者和流派等条件进行筛选查询。
- 收藏/取消收藏,用户点击按钮,收藏音乐
- 评论获取:管理员功能,点击【获取评论】按钮,输入需要爬取的页数,可以开启爬取评论爬虫,在爬取历史功能页面,可以查看详情
- 查看评论:查看具体评论信息
- 详情:查看音乐详情
2、音乐分析
1)排名分析
点击右上角的「全部 / Top250」按钮,可切换查看全部数据分析或仅查看 Top250 榜单的数据分析结果。
【评分排名Top20】根据观众给出的平均评分,将作品进行排序,并选出前20名的作品。
【评价人数排名Top20】根据每部作品收到的评价数量,将作品进行排序,并选出前20名的作品。
【评分排名Top20流派占比】 流派占比指的是在评分排名Top20或评价人数排名Top20中,不同类型(如摇滚、流行等)作品所占的比例。通过这一数据,可以了解哪些类型的作品在这些排名中占据主导地位,从而分析当前市场上的流行趋势和观众偏好。
2)表演者分析
点击右上角的「全部 / Top250」按钮,可切换查看全部数据分析或仅查看 Top250 榜单的数据分析结果。
【作品数量 Top20】:展示作品数量排名前 20 的表演者。
【评论情感 Top5】:通过对评论情感进行分析,提取正向评价比例最高的前五位表演者。
【均分排名】:统计每位表演者所有作品的平均评分,展示均分排名前 20 的表演者。
【评论词云】:默认展示所有评论的词云图;点击前三张图中的任意表演者姓名,可查看该表演者的专属评论词云图。

3)流派分析
点击右上角的「全部 / Top250」按钮,可切换查看全部数据分析或仅查看 Top250 榜单的数据分析结果。
【评论情感分析】:基于用户评论情感,对各个流派进行分析,可直观反映不同流派的受欢迎程度。
【各流派作品均分排名】:统计并对比各流派作品的平均评分,用于评估整体质量水平。
【各流派作品数量】:展示各流派对应的作品数量,反映其在整体作品库中的占比情况。
4)年度分析
点击右上角的「全部 / Top250」按钮,可切换查看全部数据分析或仅查看 Top250 榜单的数据分析结果。
【年度作品数量】:展示各年份发布的作品数量,直观了解作品发布的年度分布情况。
【年度均分】:统计并对比每年作品的平均评分,通过折线图展示评分随年份的变化趋势,反映作品质量的年度变化情况。
5)评论分析
根据表演者、流派等条件筛选与分析评论数据。
【评论情感占比】:基于评论数据进行情感分析,展示舆情指数的整体分布情况,帮助快速识别用户态度倾向。
【评论词云】:提取评论中的高频关键词,生成可视化词云图,直观展示用户关注的核心内容。
【评论列表】:展示完整评论内容,支持按条件查看具体评论,便于深入了解用户反馈与观点。图标颜色(舆情指数大于60分为绿色,45分-60分为橙色,小于45分为红色)
3、音乐推荐
音乐推荐分为推荐音乐和我的收藏两个部分
【推荐音乐】使用基于物品的协同过滤(ItemCF)算法进行推荐
【我的收藏】展示用户收藏的音乐信息
4、大屏展示
使用科技化大屏,分析top250数据。具体分析了涉及表演者人数、涉及流派数量、Top10音乐展示(音乐名称、表演者、评分)、年度发布个数趋势柱状图、个流派作品数量饼图、表演者作品数量top10折线图和音乐介绍词云图。
5、数据爬取
管理员功能。数据获取分为按风格获取和获取Top250数据。
1)按照风格获取,用户需要选择风格类型,输入开始页码和结束页面,然后进行爬取。
2)获取top250数据默认爬取全部数据
点击爬取历史,可查看历史爬取状态
6、用户管理
该功能是管理员功能,管理用户信息
1)新增:点击新增按钮,输入用户信息,可添加新用户
2)搜索:输入用户名字和手机号码,点击搜索即可查询用户信息
3)编辑:编辑用户信息
4)重置密码:点击重置密码,可重置该用户密码
5)启用/停用:对用户账号状态进行修改,被停用的用户无法登录系统
6)删除:删除该账号
7、个人信息
用户查看个人信息,输入新的信息点击提交,可更新个人信息
8、修改密码
输入原密码与新密码,可修改密码
9、登录注册
用户登录注册
四、其他
源码+技术文档+lun文,需要的小伙伴请私信~
更多技术服务,需要的小伙伴请私信~