Python爬虫实战:爬取小姐姐最近的听歌曲目
前言
作為網(wǎng)易云村的深度用戶,網(wǎng)易云音樂應(yīng)該是我除了微信外打開時(shí)間最長(zhǎng)的 App 了。并不是應(yīng)為網(wǎng)易云上面的歌曲多,而是因?yàn)槟切┳咝牡脑u(píng)論。邊聽歌邊刷評(píng)論,感覺就像是走進(jìn)了他人的人生之中,從另外一種意義來講也是讓自己有限的人生得以延長(zhǎng),變得更加多姿多彩。
直到有一天我像往常一樣劃拉著評(píng)論,一不小心手指觸碰到了某個(gè)用戶的昵稱,然后就去到了他的個(gè)人主頁(yè)。咦,原來這里是可以點(diǎn)進(jìn)去的啊,在他的個(gè)人主頁(yè)我可以看到他的聽歌排行榜、創(chuàng)建的歌單以及收藏的歌單,而且我并沒有關(guān)注他。
此時(shí)的我突然靈機(jī)一動(dòng),豈不是可以用這個(gè)來查看小姐姐最近都在聽什么類型的歌,而且歌曲在一定程度上還反映了聽歌人的心情,真是一舉兩得呀。
PS:如有需要Python學(xué)習(xí)資料的小伙伴可以加下方的群去找免費(fèi)管理員領(lǐng)取
點(diǎn)擊加群即可免費(fèi)獲取Python學(xué)習(xí)資料
接口分析
首先我們進(jìn)打開網(wǎng)易云網(wǎng)頁(yè)版,隨便選取一首歌后進(jìn)入其評(píng)論列表,然后再選取一個(gè)評(píng)論者進(jìn)入到他的個(gè)人主頁(yè),不出意外的話就可以看到他最近的聽歌排行了。
?
來,我們觀察下 URL,它應(yīng)該像是下面這個(gè)樣子的。為了保護(hù)用戶隱私我隱藏了最后四位數(shù)字。仔細(xì)看這 URL 我們猜測(cè)最后的參數(shù)應(yīng)該是用戶的唯一 ID 標(biāo)識(shí),那么我們?nèi)绾尾拍塬@取到小姐姐的網(wǎng)易云 ID 呢。別急,下文會(huì)說。
https://music.163.com/#/user/home?id=4682****接著按 F12 打開瀏覽器開發(fā)者調(diào)試窗口,刷新頁(yè)面分析下網(wǎng)絡(luò)請(qǐng)求。
?
?
嗯,就是這個(gè)接口了,返回的數(shù)據(jù)有 100 條記錄,我們可以點(diǎn)擊網(wǎng)頁(yè)「聽歌排行」右下角的「查看更多」來確認(rèn)下,發(fā)現(xiàn)確實(shí)是只能查看最近的 100 首
?
獲取數(shù)據(jù)
接口獲取到了,剩下獲取數(shù)據(jù)的工作就不難了,直接寫一個(gè)爬蟲爬下來即可。
import?requests import?json#?模擬瀏覽器請(qǐng)求 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':?'*/*', }#?構(gòu)建?URL?以及?POST?參數(shù) 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' }#?發(fā)送?post?請(qǐng)求,第一個(gè)參數(shù)是?URL,第二個(gè)參數(shù)是請(qǐng)求參數(shù) req?=?requests.post(url,?data)??print(json.loads(req.text))#?輸出結(jié)果 {"allData":[{"playCount":0,"score":100,"song":{"name":"盛夏光年?(2013版)","id":28181110,"pst":0,"t":0,"ar":[{"id":13193,"name":"五月天","tns":...注意,因?yàn)槲覀冏詈笠@取的是歌手的名字。所以,需要將獲取到的數(shù)據(jù)結(jié)果格式化一下。
result?=?json.loads(req.text) names?=?[] for?i?in?range(100):names.append(result['allData'][i]['song']['ar'][0]['name'])#?準(zhǔn)備生成云圖的字符串 text?=?",".join(names)生成云圖
最后,將我們上面獲取到的歌手集合生成一張?jiān)~云圖即可。
import?matplotlib.pyplot?as?plt from?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()?
最后,萬(wàn)事俱備,就差小姐姐的網(wǎng)易云用戶 ID 了。其實(shí)很簡(jiǎn)單,找一下她之前給你分享過的歌曲記錄就可以啦,微信打開歌曲鏈接,點(diǎn)擊右上角三個(gè)點(diǎn),然后選擇「復(fù)制鏈接」,之后你會(huì)得到類似下面的一個(gè)鏈接。沒錯(cuò),那個(gè) userid就是用戶唯一標(biāo)識(shí)了。
https://y.music.163.com/m/song?id=4587****&userid=4682****&from=message本文的文字及圖片來源于網(wǎng)絡(luò),僅供學(xué)習(xí)、交流使用,不具有任何商業(yè)用途,版權(quán)歸原作者所有,如有問題請(qǐng)及時(shí)聯(lián)系我們以作處理。
作者:派森醬
總結(jié)
以上是生活随笔為你收集整理的Python爬虫实战:爬取小姐姐最近的听歌曲目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 种基于局域网的点对点语音通信
- 下一篇: 品牌纠纷中的盾牌——商标