Python 偷偷告訴你小姐姐的聽歌喜好

作為網易雲村的深度使用者,網易雲音樂應該是我除了微信外開啟時間最長的 App 了。並不是應為網易雲上面的歌曲多,而是因為那些走心的評論。邊聽歌邊刷評論,感覺就像是走進了他人的人生之中,從另外一種意義來講也是讓自己有限的人生得以延長,變得更加多姿多彩。

直到有一天我像往常一樣劃拉著評論,一不小心手指觸碰到了某個使用者的暱稱,然後就去到了他的個人主頁。咦,原來這裡是可以點進去的啊,在他的個人主頁我可以看到他的聽歌排行榜、建立的歌單以及收藏的歌單,而且我並沒有關注他。

此時的我突然靈機一動,豈不是可以用這個來檢視小姐姐最近都在聽什麼型別的歌,而且歌曲在一定程度上還反映了聽歌人的心情,真是一舉兩得呀。

介面分析

首先我們進開啟網易雲網頁版,隨便選取一首歌后進入其評論列表,然後再選取一個評論者進入到他的個人主頁,不出意外的話就可以看到他最近的聽歌排行了。

Python 偷偷告訴你小姐姐的聽歌喜好

來,我們觀察下 URL,它應該像是下面這個樣子的。為了保護使用者隱私我隱藏了最後四位數字。仔細看這 URL 我們猜測最後的引數應該是使用者的唯一 ID 標識,那麼我們如何才能獲取到小姐姐的網易雲 ID 呢。別急,下文會說。

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

接著按 F12 開啟瀏覽器開發者除錯視窗,重新整理頁面分析下網路請求。

嗯,就是這個介面了,返回的資料有 100 條記錄,我們可以點選網頁「聽歌排行」右下角的「檢視更多」來確認下,發現確實是只能檢視最近的 100 首,

Python 偷偷告訴你小姐姐的聽歌喜好

獲取資料

介面獲取到了,剩下獲取資料的工作就不難了,直接寫一個爬蟲爬下來即可。

import requestsimport 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 pltfrom wordcloud import WordClouddef 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()

Python 偷偷告訴你小姐姐的聽歌喜好

最後,萬事俱備,就差小姐姐的網易雲使用者 ID 了。其實很簡單,找一下她之前給你分享過的歌曲記錄就可以啦,微信開啟歌曲連結,點選右上角三個點,然後選擇「複製連結」,之後你會得到類似下面的一個連結。沒錯,那個

userid

就是使用者唯一標識了。

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

總結

今天我們總結了如何用 Python 來獲取小姐姐的最近聽歌排行榜,如果以後覺得沒有什麼話題可聊的話就從她喜歡的歌曲開始吧。小夥伴們都學會了麼?感興趣的小夥伴們可關注我回復私信獲取原始碼