7、基于爬虫+Flask+Echarts+MySQL的网易云评论可视化大屏

基于爬虫+Flask+Echarts+MySQL的网易云评论可视化大屏

  • 1、前言
  • 2、实现
    • 2.1 挑选想要采集的歌曲评论
    • 2.2 构建爬虫
      • 2.2.1 采集歌曲评论
      • 2.2.2 清洗数据入库
    • 2.3 搭建flask框架
    • 2.4 数据传值
    • 2.5 完整代码&数据集获取

1、前言

本项目是基于requests爬虫+flask+echarts搭建的网易云评论的可视化大屏,主要涉及到的技术有爬虫、数据库操作,flask框架,echarts图表。

最终效果如下:
在这里插入图片描述

2、实现

2.1 挑选想要采集的歌曲评论

为了爬取歌曲评论,一想到的是网易云音乐,故从中挑选评论比较多的五首歌,分别是:

富士山下
爱情转移
孤独患者
葡萄成熟时
任我行

这五首歌,对应的网易云 id 是:

music_list = {65766: '富士山下', 65536: '爱情转移', 64093: '孤独患者', 66285: '葡萄成熟时', 27483202: '任我行'}

2.2 构建爬虫

2.2.1 采集歌曲评论

url = 'https://music.163.com/weapi/comment/resource/comments/get?csrf_token='
data = {
    'params': encText,
    'encSecKey': encSecKey
}
respond = requests.post(url, headers=headers, data=data)
json_data = json.loads(respond.text)
comments = json_data['data']['comments']
for per_comment in comments:
    comment = per_comment['content']
    user_name = per_comment['user']['nickname']
    user_id = per_comment['user']['userId']
    comment_time = per_comment['time']
    timestamp = comment_time / 1000
    dt_object = datetime.datetime.fromtimestamp(timestamp)
    phone = per_comment.get('extInfo', {}).get('endpoint', {}).get('CLIENT_TYPE', '')
    ip = per_comment['ipLocation']['location']
    per_line = pd.DataFrame(
        {'user_id': [user_id], 'comment': [comment], 'user_name': [user_name], 'time': [dt_object], 'ip': [ip],
         'phone': [phone], 'music_id': [music_id], 'music_name': [music_list[music_id]]})
    result = pd.concat([result, per_line])
    last_time = comment_time

2.2.2 清洗数据入库

def process_csv(file_path):
    # 读取 CSV 文件
    df = pd.read_csv(file_path)
    df = df.drop_duplicates()
    # 数据库连接
    connection = pymysql.connect(
        host='127.0.0.1',
        user='root',
        password='123456',
        database='music_comments'
    )
    try:
        # 创建表(如果不存在)
        create_table_if_not_exists(connection)
        insert_query = """
        INSERT INTO comments (user_id, comment, user_name, time, ip, phone, music_id, music_name)
        VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
        """
        with connection.cursor() as cursor:
            for _, row in df.iterrows():
                cursor.execute(insert_query, (
                    row['user_id'] if pd.notna(row['user_id']) else None,
                    row['comment'] if pd.notna(row['comment']) else None,
                    row['user_name'] if pd.notna(row['user_name']) else None,
                    row['time'] if pd.notna(row['time']) else None,
                    row['ip'] if pd.notna(row['ip']) else None,
                    row['phone'] if pd.notna(row['phone']) else None,
                    row['music_id'] if pd.notna(row['music_id']) else None,
                    row['music_name'] if pd.notna(row['music_name']) else None
                ))
        connection.commit()
        print("数据写入成功")
    except Exception as e:
        print(f"错误: {e}")
    finally:
        connection.close()

最后数据库中数据效果如下:

在这里插入图片描述

2.3 搭建flask框架

from flask import Flask,render_template
 
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
 
@app.route('/')
def index():
    return render_template('index.html')
 
if __name__ == '__main__':
    app.run(debug=True)

2.4 数据传值

# 左上图
data_music_name = ['富士山下', '爱情转移', '孤独患者', '葡萄成熟时', '任我行']
data_count = [216651, 142228, 109656, 102065, 26275]
list_1_data = []
for i in range(0, len(data_music_name)):
    music_name = data_music_name[i]
    count = data_count[i]
    list_1_data.append([music_name, count])
# 中上图
data2 = df['phone'].value_counts().reset_index()
data2 = data2[~data2['phone'].isnull()]
data_phone = data2['phone'].tolist()
data_count = data2['count'].tolist()
list_2_name = []
list_2_value = []
for i in range(0, len(data_phone)):
    list_2_name.append(data_phone[i])
    list_2_value.append(data_count[i])
# 右上图
text_df = df[~df['comment'].isnull()]
text = '。'.join(text_df['comment'].tolist())
words = jieba.cut(text)
word_counts = Counter(words)
filtered_counts = {word: count for word, count in word_counts.items()
                   if len(word) > 1 and re.match(r'^[\u4e00-\u9fa5]+$', word)}
most_common_words = Counter(filtered_counts).most_common(10)
most_common_words4 = Counter(filtered_counts).most_common(100)
list_3_name = []
list_3_value = []
for per_word in most_common_words:
    list_3_name.append(per_word[0])
    list_3_value.append(per_word[1])
# 左下图
data4 = df['ip'].value_counts().reset_index()
data4 = data4[~data4['ip'].isnull()]
data_ip = data4['ip'].tolist()
data_count = data4['count'].tolist()
list_4_name = []
list_4_value = []
# 显示全部
# for i in range(0, len(data_ip)):
# 显示前十
for i in range(0, 10):
    list_4_name.append(data_ip[i])
    list_4_value.append(data_count[i])
# 词云
wordcloud_data = [{"name": word, "value": count} for word, count in most_common_words4]

2.5 完整代码&数据集获取

完整代码&数据集可以点击最上面链接下载或者扫描下方👇🏻👇🏻👇🏻二维码获取,还有更多可视化大屏等着你:

001 服务大数据可视化监管平台
002 水质情况实时监测预警系统
003 联心菜市场数据中心
004 政务大数据共享交换平台
005 可视化监控管理
006 全国疫情实时监控
007 惠民服务平台
008 兰州智慧消防大数据平台
......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/902784.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WASM 使用说明23事(RUST实现)

文章目录 1. wasm是什么1.1 chatgpt定义如下:1.2 wasm关键特性: 2. wasm demo2.1 cargo 创建项目2.2 编写code2.3 安装wasm-pack2.4 编译 3.1 html页面引用wasm代码(js引用)3.2 访问页面4 导入js function4.1 编写lib.rs文件,内容…

应用案例 | Panorama SCADA助力巴黎奥运会:保障赛事协调与安全

谈到2024年最受关注的体育盛事,巴黎奥运会无疑是焦点之一。作为全球瞩目的顶级赛事,它不仅汇集了来自世界各地的精英运动员,还点燃了全球观众的热情。然而,组织如此大规模的活动绝非易事。从大量游客通过公共交通涌入,…

基于SSM的宠物猫狗商业系统设计与实现

前言 当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统宠物猫狗商业采取了人工的管理方法&#…

mfc之tab标签控件的使用--附TabSheet源码

TabSheet源码 TabSheet.h #if !defined(AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_) #define AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabSheet.h : …

华为云低代码Astro Zero技巧教学7:打造实时更新的动态数据表

数字化经营的浪潮中,数据管理的高效与准确成为企业持续成长的关键。Astro Zero高级页面功能通过创新的表格视图编辑模式,实现了前端操作与后台数据的无缝同步,极大地提升了数据处理的效率和可靠性。 本次技巧内容:使用Astro Zero制…

【亲测】mini版centos7.9配置网络基础ssh等直接使用

1,安装好系统: 默认安装好 CentOS-7-x86_64-Minimal-2009.iso2,配置静态或动态ip: 保持root登陆操作 先配置成动态ip: vi /etc/sysconfig/network-scripts/ifcfg-eth0 重启网卡 systemctl restart network 测试网络畅通 3,配置国内yum镜像源: 先备份: cp /etc/y…

Python | Leetcode Python题解之第503题下一个更大元素II

题目&#xff1a; 题解&#xff1a; class Solution:def nextGreaterElements(self, nums: List[int]) -> List[int]:n len(nums)ret [-1] * nstk list()for i in range(n * 2 - 1):while stk and nums[stk[-1]] < nums[i % n]:ret[stk.pop()] nums[i % n]stk.appen…

排查PHP服务器CPU占用率高的问题

排查PHP服务器CPU占用率高的问题通常可以通过以下步骤进行&#xff1a; 使用top或htop命令&#xff1a;这些命令可以实时显示服务器上各个进程的CPU和内存使用情况。找到CPU使用率高的进程。 查看进程日志&#xff1a;如果PHP-FPM或Apache等服务器进程的日志记录了具体的请求…

中国书法、绘画

孙溟㠭浅析“篆刻” 什么是篆刻&#xff0c;治印一般采用篆书&#xff0c;先写后刻&#xff0c;所以称&#xff02;篆刻&#xff02;&#xff0c;也是镌刻印章的统称。博物馆常见的金属印章&#xff0c;多数是先刻印模&#xff0c;然后再浇铸&#xff0c;也有提前做好金属印坯…

Java当中的数据类型

基本数据类型和引用数据类型基本数据类型&#xff1a; 四类&#xff1a;整型、浮点型、字符型以及布尔型八种&#xff1a; 注意&#xff1a; 字符类型char&#xff1a;2字节&#xff08;1字节8位&#xff09;boolean数据类型不可以 Java当中没有所谓的&#xff1a;0是假 …

已知圆心经纬度,半径长度。算圆上点的经纬度,画圆

前言&#xff1a;经度变化1度&#xff0c;111320米.纬度变化1度&#xff0c;111130米 #define pi 3.14159265 double convertArc(double angle) {double angle_arc(angle/180.0)*pi;return angle_arc; } typedef struct{double lng;double lat;double height;}polygon_points;…

Day03罗马数字转整数

罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 例如&#xff0c; 罗马数字 2 写做 II &#xff0c;即为两个并列的 1 。12 写做 XII &#xff0c;即为 X II 。 27 写做 XXVII, 即为 XX V II 。 通常情况下&…

深入拆解TomcatJetty——Tomcat如何实现IO多路复用

深入拆解Tomcat&Jetty 专栏地址&#xff1a; 极客时间-深入拆解Tomcat & Jetty IO 多路复用 当用户线程发起 I/O 操作后&#xff0c;网络数据读取操作会经历两个步骤&#xff1a; 用户线程等待内核将数据从网卡拷贝到内核空间。内核将数据从内核空间拷贝到用户空间…

面试域——技术面试准备

摘要 来到技术面试这环节有两种情况&#xff0c;其一&#xff1a;这场技术面试可能就是一个面试官KPI面试&#xff08;就是面试工作量&#xff0c;这个面试你是不可能过。&#xff09;如今的就业环境下&#xff0c;人力资源部门也是有考核指标。如果遇到这样的面试你就放平心态…

RabbitMq-队列交换机绑定关系优化为枚举注册

&#x1f4da;目录 &#x1f4da;简介:&#x1f680;比较&#x1f4a8;通常注册&#x1f308;优化后注册 ✍️代码&#x1f4ab;自动注册的关键代码 &#x1f4da;简介: 该项目介绍&#xff0c;rabbitMq消息中间件&#xff0c;对队列的注册&#xff0c;交换机的注册&#xff0c…

SQL进阶技巧:如何求组内排除当前行的移动平均值?

目录 0 需求描述 2 数据准备 3 问题分析 4 小结 0 需求描述 -- 按照 日期,省份,等级 分组 求分数的平均值;但是需要剔除当前行的数据 2 数据准备 create table avgtest as (select 2024-10-24 as cdate, 广东 as province,深圳 as city, 2 as level, 200 as scoreunio…

雷池社区版OPEN API使用教程

OPEN API使用教程 新版本接口支持API Token鉴权 接口文档官方没有提供&#xff0c;有需要可以自行爬取&#xff0c;爬了几个&#xff0c;其实也很方便 使用条件 需要使用默认的 admin 用户登录才可见此功能版本需要 > 6.6.0 使用方法 1.在系统管理创建API TOKEN 2.发…

基于SSM+小程序的汽车保养登录管理系统(汽车1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的汽车保养登录管理系统实现了管理员及用户。 1、管理员实现了管理门店和其对应的员工&#xff0c;管理保养信息和汽车配件信息&#xff0c;管理各种状态的订单。 2、用户…

offset Explorer连接云服务上的kafka连接不上

以上配置后报连接错误时&#xff0c;可能是因为kafka的server.properties配置文件没配置好&#xff1a; 加上面两条配置&#xff0c;再次测试连接&#xff0c;成功 listeners和advertised.listeners

若依部署上线遇到的问题

一、若依部署上线的用户头像模块不能回显&#xff1a; 首先是后端修改部署上线后若依存储图片的本地地址 其次将上线前端配置文件中的图片相关配置给删除 二、若依部署上线后验证码不显示问题 在确保前后端请求打通后还有这个问题就是磁盘缓存问题 三、若依部署上线遇到404页…