1. 程式人生 > 實用技巧 >Python爬蟲實戰:爬取小姐姐最近的聽歌曲目

Python爬蟲實戰:爬取小姐姐最近的聽歌曲目

前言

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

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

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

PS:如有需要Python學習資料的小夥伴可以加下方的群去找免費管理員領取

介面分析

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

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

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

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

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

獲取資料

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

importrequests
importjson

#模擬瀏覽器請求
headers={
'Referer':'http://music.163.com/',
'Host':'music.163.com',
'User-Agent':'Mozilla/5.0(Macintosh;IntelMacOSX10_15_0)AppleWebKit/537.36(KHTML,likeGecko)Chrome/83.0.4103.106Safari/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=[]
foriinrange(100):
names.append(result['allData'][i]['song']['ar'][0]['name'])

#準備生成雲圖的字串
text=",".join(names)

生成雲圖

最後,將我們上面獲取到的歌手集合生成一張詞雲圖即可。

importmatplotlib.pyplotasplt
fromwordcloudimportWordCloud

defshow_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()

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

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

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理。

作者:派森醬