抽取网易云音乐热门评论:html+css+python+js 音乐与灵魂的碰撞

代码链接



不说废话,上代码!!!

get.py

# get.py
import urllib.request
import urllib.error
import urllib.parse
import json # 抓取网易云音乐指定url的热评
def get_hotComments(id):
url = 'https://music.163.com/weapi/v1/resource/comments/R_SO_4_'+id+'?csrf_token=' # 歌评url
header = {'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"} # post请求表单数据
data = {'params':'LPkOcWb/uz2Nj6xw+RFhGJ1PkFi4+lh4agK+1jRGmjMAiOcJ5RHxQBbZa+aME54AUdi21JkqLu/yeHjjIaLQJ4wzqiuzrzYUKciRCqmCDX9ziKoktv5mgvvlA5+A9a7kUF5pabudBaWjsut+9T5kfHQBv75fIcDRt/Anyb8FnG/Ro6R8IStD0/JknFvH5+3S',
'encSecKey':'5627cc7941cf4cbd59b13668efe38a622ed0889d33cdcf603d18b025eb34ac434c882ed5ad16ca06e88e40a8b91de455483d0b88b6b460ca146b163e67ebab688b2feb4f22369db85a926744bad9114d3cddd00ca6255d7cdcad6cf7b9300a6fdf49adf983087cd830131fabbac39ec4a526432958309cf92c0b5a6bc177078b'}
postdata = urllib.parse.urlencode(data).encode('utf8') # 进行编码
request = urllib.request.Request(url, headers=header, data=postdata)
response = urllib.request.urlopen(request).read().decode('utf8')
json_dict = json.loads(response) # 获取json
hot_comment = json_dict['hotComments'] # 获取json中的热门评论
print(id)
num = 1
for item in hot_comment:
printer1=item['content']
with open("comments.txt","a",encoding='utf-8') as f:
f.write('id : '+id+' : '+printer1)
f.write("\n")
f.close()
print('id : '+id+' '+'第%d条评论:' % num+printer1)
num += 1 if __name__ == '__main__':
id=input()
get_hotComments(id)

index.py

import get as g
n=int(input())
while 1:
g.get_hotComments(str(n))
n=n+1

注:n为网易云音乐歌曲id。

例如:网易云音乐链接:https://music.163.com/#/song?id=2016388286

id为2016388286

id通常为8位-10位数字。

结尾附上部分comments.txt文件

index.html

重头戏来了!

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>随机云村评论</title>
<style>
body {
margin: 0;
padding: 0;
font-family: 'Arial', sans-serif;
background: linear-gradient(135deg, #1e272e, #2c3e50);
color: #ffffff;
overflow-x: hidden;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
text-align: center;
}
.container {
max-width: 800px;
padding: 40px;
border-radius: 10px;
background: rgba(0, 0, 0, 0.6);
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
backdrop-filter: blur(5px);
}
.container h1 {
font-size: 3rem;
margin: 0 0 20px;
}
.container h2 {
font-size: 1.5rem;
margin: 0 0 15px;
}
.container p {
font-size: 1.2rem;
margin: 20px 0;
}
.button {
padding: 10px 20px;
background: #00ff80;
border: none;
border-radius: 5px;
font-size: 1.2rem;
color: #1e272e;
cursor: pointer;
transition: transform 0.3s ease, background 0.3s ease;
}
.button:hover {
background: #00e676;
transform: scale(1.1);
}
a {
color: #00ff80;
text-decoration: none;
transition: color 0.3s ease;
}
a:hover {
color: #00e676;
text-decoration: underline;
}
.particles {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
}
.music-player {
margin-top: 20px;
}
</style>
</head>
<body>
<canvas class="particles"></canvas>
<div class="container">
<h1>随机云村评论</h1>
<h2>音乐与灵魂的碰撞</h2>
<a href="/">返回首页</a>
<p id="comment">点击按钮随机抽取一条评论</p>
<button class="button" onclick="fetchRandomComment()">抽取评论</button>
<div class="music-player" id="musicPlayer"></div>
</div>
<script>
let comments = []; // 从服务器加载评论文件
async function loadComments() {
try {
const response = await fetch('comments.txt');
if (!response.ok) {
throw new Error('Failed to fetch comments');
}
const fileContent = await response.text();
comments = parseComments(fileContent);
document.getElementById('comment').textContent = "点击按钮随机抽取一条评论";
} catch (error) {
console.error("Failed to load comments:", error);
document.getElementById('comment').textContent = "加载评论失败,请稍后再试。";
}
} // 解析评论内容
function parseComments(fileContent) {
const lines = fileContent.split('\n');
const parsedComments = [];
let currentComment = null; lines.forEach(line => {
const trimmedLine = line.trim();
if (trimmedLine === "") return; const parts = trimmedLine.split(' : ');
if (parts.length >= 3) {
if (currentComment) {
parsedComments.push(currentComment);
}
currentComment = { id: parts[0].trim(), number: parts[1].trim(), content: parts.slice(2).join(' : ').trim() };
} else if (currentComment) {
currentComment.content += "\n" + trimmedLine;
}
}); if (currentComment) {
parsedComments.push(currentComment);
} return parsedComments;
} // 随机抽取评论
function fetchRandomComment() {
if (comments.length === 0) {
loadComments();
return;
} const randomIndex = Math.floor(Math.random() * comments.length);
const comment = comments[randomIndex];
const songUrl = `https://music.163.com/#/song?id=${comment.number}`;
document.getElementById('comment').innerHTML = `来自歌曲<a href="${songUrl}" target="_blank">${comment.number}</a>的评论:${comment.content}`;
const musicPlayerDiv = document.getElementById('musicPlayer');
musicPlayerDiv.innerHTML = `<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=${comment.number}&auto=1&height=66"></iframe>`;
} // 初次加载时尝试加载评论
loadComments(); // 粒子效果
document.addEventListener('DOMContentLoaded', () => {
const canvas = document.querySelector('.particles');
const ctx = canvas.getContext('2d'); canvas.width = window.innerWidth;
canvas.height = window.innerHeight; window.addEventListener('resize', () => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
}); const particles = []; class Particle {
constructor(x, y, color) {
this.x = x;
this.y = y;
this.color = color;
this.size = Math.random() * 3 + 1;
this.speedX = Math.random() * 2 - 1;
this.speedY = Math.random() * 2 - 1;
} draw() {
ctx.fillStyle = this.color;
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
ctx.fill();
} update() {
this.x += this.speedX;
this.y += this.speedY; if (this.x < 0 || this.x > canvas.width) this.speedX *= -1;
if (this.y < 0 || this.y > canvas.height) this.speedY *= -1;
}
} function createParticles() {
for (let i = 0; i < 100; i++) {
const x = Math.random() * canvas.width;
const y = Math.random() * canvas.height;
const color = `hsl(${Math.random() * 360}, 100%, 50%)`;
particles.push(new Particle(x, y, color));
}
} createParticles(); function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height); particles.forEach(particle => {
particle.draw();
particle.update();
}); requestAnimationFrame(animate);
} animate();
});
</script>
</body>
</html>

comments.txt

格式 :

id : $id : $comment

部分评论 comments.txt https://github.com/fjsje/wanwusangzhi/blob/main/work/writing/comments.txt

运行指南

先打开index.py,输入起始歌曲id。

抓取足够多的评论后,打开index.html

注意index.html 请在服务器上部署才能抓取comments.txt成功,否则会出现以下情况:



点赞加关注,精彩不迷路!

抽取网易云音乐热门评论:html+css+python+js 音乐与灵魂的碰撞的更多相关文章

  1. Python 获取 网易云音乐热门评论

    最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧.获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据.但是有的时候我们想要 ...

  2. Python之手把手教你用JS逆向爬取网易云40万+评论并用stylecloud炫酷词云进行情感分析

    本文借鉴了@平胸小仙女的知乎回复 https://www.zhihu.com/question/36081767 写在前面: 文章有点长,操作有点复杂,需要代码的直接去文末即可.想要学习的需要有点耐心 ...

  3. Python爬取网易云热歌榜所有音乐及其热评

    获取特定歌曲热评: 首先,我们打开网易云网页版,击排行榜,然后点击左侧云音乐热歌榜,如图: 关于如何抓取指定的歌曲的热评,参考这篇文章,很详细,对小白很友好: 手把手教你用Python爬取网易云40万 ...

  4. 用其他音乐源帮帮网易云,Ubuntu听歌利器

    镜像文章 1.用其他音乐源帮帮网易云,Android听歌利器 2.用其他音乐源帮帮网易云,Windows听歌利器 众所周知,国内只有网易云推出了Linux的客户端,在Listen 1并不十分好用的基础 ...

  5. 从Airbnb的发展历程和网易云的大起大落看IT行业创新(第5周课后作业)

    我想先根据个人看法回答“创新是什么?”这个空泛的问题.创新是面对当下的资源条件限制创造出能够满足动态需求或解决动态发展中的问题的新策略.这种实用化定义在大部分邻域都勉强能让定义者自圆其说,对于IT行业 ...

  6. NetCloud——一个网易云音乐评论抓取和分析的Python库

    在17的四月份,我曾经写了一篇关于网易云音乐爬虫的文章,还写了一篇关于评论数据可视化的文章.在这大半年的时间里,有时会有一些朋友给我发私信询问一些关于代码方面的问题.所以我最近抽空干脆将原来的代码整理 ...

  7. python爬取网易云音乐歌曲评论信息

    网易云音乐是广大网友喜闻乐见的音乐平台,区别于别的音乐平台的最大特点,除了“它比我还懂我的音乐喜好”.“小清新的界面设计”就是它独有的评论区了——————各种故事汇,各种金句频出.我们可以透过歌曲的评 ...

  8. python爬虫+词云图,爬取网易云音乐评论

    又到了清明时节,用python爬取了网易云音乐<清明雨上>的评论,统计词频和绘制词云图,记录过程中遇到一些问题 爬取网易云音乐的评论 一开始是按照常规思路,分析网页ajax的传参情况.看到 ...

  9. Python学习-使用Python爬取陈奕迅新歌《我们》网易云热门评论

    <后来的我们>上映也有好几天了,一直没有去看,前几天还爆出退票的事件,电影的主题曲由陈奕迅所唱,特地找了主题曲<我们>的MV看了一遍,还是那个感觉.那天偶然间看到Python中 ...

  10. python爬取网易云音乐评论及相关信息

    python爬取网易云音乐评论及相关信息 urllib requests 正则表达式 爬取网易云音乐评论及相关信息 urllib了解 参考链接: https://www.liaoxuefeng.com ...

随机推荐

  1. Python脚本消费多个Kafka topic

    在Python中消费多个Kafka topic,可以使用kafka-python库,这是一个流行的Kafka客户端库.以下是一个详细的代码示例,展示如何创建一个Kafka消费者,并同时消费多个Kafk ...

  2. 如何使用,操作Redis数据库

    本博客不再维护,搬家到 http://zthinker.com .个人微信小程序(分布式编程) Redis是一个开源的内存中键值数据存储.Redis是NoSQL数据库,它不使用结构化查询语言,也称为S ...

  3. 使用Apache的ab工具进行压力测试

    Apache附带的ab工具(本机使用的PHP环境是WAMP集成环境,ab工具位于D:\wamp\bin\apache\Apache2.2.21\bin)非常容易使用,ab可以直接在Web服务器本地发起 ...

  4. 本地环境搭建Virtualbox+Vagrant

    环境准备 virtualbox是免费,不必要费劲去找破解,下载就可以用. 使用virtualbox每次安装虚拟机,需要你去下载iso,然后设置虚拟机硬件配置,使用iso创建虚拟器.一系列的手工操作,如 ...

  5. Threejs的三维坐标系

    在三维空间中,所有的物体和相机都需要基于一个统一的坐标系来进行定位和操作.理解坐标系的基本概念,对于创建稳定.准确的三维效果至关重要. 基础 Three.js 采用的是右手坐标系,这意味着如果你将右手 ...

  6. 实现ELF文件解析,支持-h, -S, -s

    ELF文件 编译和链接 ELF代表Executable and Linkable Format,是类Unix平台最通用的二进制文件格式.下面三种文件的格式都是ELF. 目标文件.o 动态库文件.so ...

  7. JavaScript 样式操作

    1.类名操作 class类名以字符串的形式存储到标签和Dom元素的属性中,标签属性为class,Dom元素属性为className,两个属性是均支持读取和修改,修改其中的一个会同步至另一个属性 cla ...

  8. 正也科技案例 | 药企使用S2P深入营销管理数据化建设

    为了获取更*的市场空间,医药健康行业正迎来一波前所未有的产业升级.尽管不少企业取得了许多成绩,但仍面临诸多挑战. 浙江某知名医药公司,在泌尿系统.心脑血管系统及眼科用药领域均拥有强势品牌.其产品更是荣 ...

  9. 一款基于 .NET + Blazor 开发的智能访客管理系统

    前言 在小区.企业.学校等场所,访客管理作为日常运营中不可或缺的一环,其重要性日益凸显.传统的访客管理方式往往依赖于人工登记.纸质记录,不仅效率低下,还存在信息易丢失.难以追溯等问题.今天大姚给大家分 ...

  10. 张高兴的 Raspberry Pi AI 开发指南:(三)将自定义模型编译为 Hailo NPU 的 .hef 模型

    目录 Python 环境配置 转换 量化 编译 参考 在上一篇博客中,探讨了如何使用 Python 和 hailo_model_zoo 中预编译的模型来实现目标检测.本篇博客将深入介绍如何将用户自定义 ...