查看原文
其他

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

派森酱 Python技术 2022-09-11

文 | 豆豆

来源:Python 技术「ID: pythonall」


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

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

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

接口分析

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

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

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

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

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

获取数据

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

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=(169))
    plt.imshow(wc)
    plt.axis('off')
    plt.show()

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

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

总结

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


PS公号内回复「Python」即可进入Python 新手学习交流群,一起100天计划!


老规矩,兄弟们还记得么,右下角的 “在看” 点一下如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

代码获取方式

识别文末二维码,回复:200626

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存