实战!Python 偷偷告诉你小姐姐的听歌喜好

简介: 实战!Python 偷偷告诉你小姐姐的听歌喜好

作为网易云村的深度用户,网易云音乐应该是我除了微信外打开时间最长的 App 了。并不是应为网易云上面的歌曲多,而是因为那些走心的评论。边听歌边刷评论,感觉就像是走进了他人的人生之中,从另外一种意义来讲也是让自己有限的人生得以延长,变得更加多姿多彩。


直到有一天我像往常一样划拉着评论,一不小心手指触碰到了某个用户的昵称,然后就去到了他的个人主页。咦,原来这里是可以点进去的啊,在他的个人主页我可以看到他的听歌排行榜、创建的歌单以及收藏的歌单,而且我并没有关注他。


此时的我突然灵机一动,岂不是可以用这个来查看小姐姐最近都在听什么类型的歌,而且歌曲在一定程度上还反映了听歌人的心情,真是一举两得呀。


接口分析


首先我们进打开网易云网页版,随便选取一首歌后进入其评论列表,然后再选取一个评论者进入到他的个人主页,不出意外的话就可以看到他最近的听歌排行了。


image.png


来,我们观察下 URL,它应该像是下面这个样子的。为了保护用户隐私我隐藏了最后四位数字。仔细看这 URL 我们猜测最后的参数应该是用户的唯一 ID 标识,那么我们如何才能获取到小姐姐的网易云 ID 呢。别急,下文会说。


https://music.163.com/#/user/home?id=4682****


接着按 F12 打开浏览器开发者调试窗口,刷新页面分析下网络请求。


image.png


image.png


嗯,就是这个接口了,返回的数据有 100 条记录,我们可以点击网页「听歌排行」右下角的「查看更多」来确认下,发现确实是只能查看最近的 100 首,


image.png


获取数据


接口获取到了,剩下获取数据的工作就不难了,直接写一个爬虫爬下来即可。


import requests
import json
# 模拟浏览器请求
headers = {
    'Referer': 'http://music.163.com/',
    'Host': 'music.163.com',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36',
    'Accept': '*/*',
}
# 构建 URL 以及 POST 参数
url = 'https://music.163.com/weapi/v1/play/record?csrf_token='
data = {
    'params': 'xrJhjXYUqEWa98DVbFtw6yTygOTCOvSAypxfWNr5kpw/MEvXsRk+Av+DNF7zY9a1oA95FBTXdW9s/MJV+eQVfCGi+/NVW7nD0igfJSsmDtE3VpM422dZR6WJGDxS3/se00qFFHx6wumfLzc9mgnfB5hGkrBwF9+P/7zamjfWSOUfvvUuWhM2Gd7z2pA11lMB',
    'encSecKey': '2371bb4de91d5de7110722d3491c7cf6d3f6f5cdcbc16a5e9c7456e4b9075c1965d851d4920fa51adae6ff1c7b722539fb03dd2ab148894c2dc9c8ba0bbb5e95bbbd2bf4fbf02023cf63391f74b6956339cb72fa32a4413de347ffb536299f5711fe02fe60f66b77ac96a16a6bcb5ba14cf9b1609ddf8e8180d683bba5801acf'
}
# 发送 post 请求,第一个参数是 URL,第二个参数是请求参数
req = requests.post(url, data)  
print(json.loads(req.text))
# 输出结果
{"allData":[{"playCount":0,"score":100,"song":{"name":"盛夏光年 (2013版)","id":28181110,"pst":0,"t":0,"ar":[{"id":13193,"name":"五月天","tns":...


注意,因为我们最后要获取的是歌手的名字。所以,需要将获取到的数据结果格式化一下。


result = json.loads(req.text)
names = []
for i in range(100):
    names.append(result['allData'][i]['song']['ar'][0]['name'])
# 准备生成云图的字符串
text = ",".join(names)


生成云图


最后,将我们上面获取到的歌手集合生成一张词云图即可。


import matplotlib.pyplot as plt
from wordcloud import WordCloud
def show_word_cloud(text):
    wc = WordCloud(font_path='/System/Library/Fonts/PingFang.ttc', background_color="white", scale=2.5,
                   contour_color="lightblue", ).generate(text)
    # 读入背景图片
    WordCloud(background_color='white', scale=1.5).generate(text)
    plt.figure(figsize=(16, 9))
    plt.imshow(wc)
    plt.axis('off')
    plt.show()


image.png


最后,万事俱备,就差小姐姐的网易云用户 ID 了。其实很简单,找一下她之前给你分享过的歌曲记录就可以啦,微信打开歌曲链接,点击右上角三个点,然后选择「复制链接」,之后你会得到类似下面的一个链接。没错,那个 userid就是用户唯一标识了。


https://y.music.163.com/m/song?id=4587****&userid=4682****&from=message


总结


今天我们总结了如何用 Python 来获取小姐姐的最近听歌排行榜,如果以后觉得没有什么话题可聊的话就从她喜欢的歌曲开始吧。小伙伴们都学会了么?

目录
相关文章
|
26天前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
231 7
|
30天前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
1月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
280 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
1月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
1月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
1月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
95 12
|
1月前
|
存储 数据采集 监控
Python文件操作全攻略:从基础到高级实战
本文系统讲解Python文件操作核心技巧,涵盖基础读写、指针控制、异常处理及大文件分块处理等实战场景。结合日志分析、CSV清洗等案例,助你高效掌握文本与二进制文件处理,提升程序健壮性与开发效率。(238字)
243 1
|
1月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
408 1
|
27天前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
201 0
|
1月前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
325 0