溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何用Python爬取酷我音樂

發(fā)布時(shí)間:2021-10-26 09:59:14 來源:億速云 閱讀:749 作者:柒染 欄目:大數(shù)據(jù)

如何用Python爬取酷我音樂,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

前兩天聽了一下酷我音樂官網(wǎng)的音樂,覺得上面的音樂還不錯(cuò),想把他們爬取得到。開始,完全沒有頭緒,但是,最后有了實(shí)現(xiàn)它的思路,那就是通過兩個(gè)json文件最終得到想聽的音樂。

如何用Python爬取酷我音樂  
在這里插入圖片描述
 

需要的Python模塊

實(shí)現(xiàn)這個(gè)過程的主要模塊有requests、json、urllib.request、urllib.parse,其中requests模塊用于請(qǐng)求得到相應(yīng)的數(shù)據(jù)(這里是得到j(luò)son數(shù)據(jù)),json模塊用于對(duì)得到的json數(shù)據(jù)進(jìn)行處理(將json數(shù)據(jù)轉(zhuǎn)換成字典,主要使用json.loads()方法),urllib.request(使用其urlretrieve()方法,用于下載音樂),urllib.parse(使用其quote()方法,用于對(duì)輸入的字符串進(jìn)行編碼)。

 

實(shí)現(xiàn)思路

首先,我們需要來到酷我音樂的官網(wǎng)(http://www.kuwo.cn/),在輸入框中輸入關(guān)鍵字,小編輸入的是:破繭然后回車,可以得到搜索相應(yīng)的歌曲列表,然而這些數(shù)據(jù)都是動(dòng)態(tài)加載的,使用requests模塊如果直接請(qǐng)求這個(gè)網(wǎng)址,根本不可能得到這些數(shù)據(jù),這個(gè)時(shí)候我們可以按電腦鍵盤F12,來到開發(fā)者模式,點(diǎn)擊Network下面的XHR,找到這些歌曲列表的那個(gè)網(wǎng)址,具體為:
如何用Python爬取酷我音樂
如何用Python爬取酷我音樂

我們需要得到這些歌曲中相應(yīng)的數(shù)據(jù)如下:
如何用Python爬取酷我音樂

其中name和artist關(guān)鍵字對(duì)應(yīng)的值為展示用和最終.mp3文件名稱,rid關(guān)鍵字對(duì)應(yīng)的值是為后面過程所用。

當(dāng)然,訪問這個(gè)網(wǎng)址不是很簡(jiǎn)單的,需要添加請(qǐng)求頭。參考代碼如下:

musicName=input('請(qǐng)輸入歌曲名稱:')
encodName=quote(musicName)
url='https://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn=1&rn=30&httpsStatus=1'.format(encodName)
referer='https://www.kuwo.cn/search/list?key={}'.format(encodName)
# 請(qǐng)求頭
headers = {
    "Cookie": "_ga=GA1.2.2021007609.1602479334; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1602479334,1602673632; _gid=GA1.2.168402150.1602673633; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1602673824; kw_token=5LER5W4ZD1C",
    "csrf": "5LER5W4ZD1C",
    "Referer": "{}".format(referer),
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36",
}
response=requests.get(url=url,headers=headers)
dict2=json.loads(response.text)
misicInfo=dict2['data']['list']  # 歌曲信息的列表
musicNames=list()   # 歌曲名稱的列表
rids=list()    # 存儲(chǔ)歌曲rid的列表
for i in range(len(misicInfo)):
    name=misicInfo[i]['name']+'-'+misicInfo[i]['artist']
    musicNames.append(name)
    rids.append(misicInfo[i]['rid'])
    print('【{}】-{}->>>{}'.format(i+1,int(random.random()*10)*'#$',name))
 

我們選擇上面列表中歌曲進(jìn)行試聽,可以發(fā)現(xiàn),在剛才那個(gè)下面有一個(gè)這樣的網(wǎng)址,里面也是一個(gè)json數(shù)據(jù),放有我試聽歌曲的下載鏈接。如下:
如何用Python爬取酷我音樂

對(duì)這個(gè)網(wǎng)址進(jìn)行分析可以得知,需要?jiǎng)偛盼覀兊哪莻€(gè) rid 數(shù)據(jù)才能訪問到相應(yīng)的json數(shù)據(jù)。網(wǎng)址為:http://www.kuwo.cn/url?format=mp3&rid=**140897945**&response=url&type=convert\_url3&br=128kmp3&from=web&t=1603463521198&httpsStatus=1,也許讀者得到的那個(gè)網(wǎng)址長(zhǎng)度比我這個(gè)長(zhǎng)一些,我這個(gè)是去掉最后面的那個(gè)參數(shù)的,因?yàn)槲野l(fā)現(xiàn)沒有最后的那個(gè)參數(shù),依舊可以訪問到相應(yīng)的數(shù)據(jù)。

 

最終代碼和運(yùn)行結(jié)果

參考代碼如下:

from urllib.request import urlretrieve
from urllib.parse import quote
import requests
import random
import json


musicName=input('請(qǐng)輸入歌曲名稱:')
encodName=quote(musicName)
url='https://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn=1&rn=30&httpsStatus=1'.format(encodName)
referer='https://www.kuwo.cn/search/list?key={}'.format(encodName)
# 請(qǐng)求頭
headers = {
    "Cookie": "_ga=GA1.2.2021007609.1602479334; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1602479334,1602673632; _gid=GA1.2.168402150.1602673633; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1602673824; kw_token=5LER5W4ZD1C",
    "csrf": "5LER5W4ZD1C",
    "Referer": "{}".format(referer),
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36",
}
response=requests.get(url=url,headers=headers)
dict2=json.loads(response.text)
misicInfo=dict2['data']['list']  # 歌曲信息的列表
musicNames=list()   # 歌曲名稱的列表
rids=list()    # 存儲(chǔ)歌曲rid的列表
for i in range(len(misicInfo)):
    name=misicInfo[i]['name']+'-'+misicInfo[i]['artist']
    musicNames.append(name)
    rids.append(misicInfo[i]['rid'])
    print('【{}】-{}->>>{}'.format(i+1,int(random.random()*10)*'#$',name))

id=int(input('請(qǐng)輸入歌曲序號(hào):'))
musicRid=rids[id-1]

url2='https://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1602674521838&httpsStatus=1'.format(musicRid)
headers2={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}
response2=requests.get(url=url2,headers=headers2)
dict3=json.loads(response2.text)
downloadUrl=dict3['url']
path=input('請(qǐng)輸入存儲(chǔ)路徑:')
urlretrieve(url=downloadUrl,filename=path+'\{}.mp3'.format(musicNames[id-1]))  # 下載歌曲

 

運(yùn)行結(jié)果:
如何用Python爬取酷我音樂
如何用Python爬取酷我音樂
找到相應(yīng)的目錄,可以發(fā)現(xiàn)在這個(gè)文件夾下面多了一個(gè).mp3文件
如何用Python爬取酷我音樂

 

總結(jié)

首先,小編先聲明一下:本程序參考代碼僅供學(xué)習(xí),切莫用于商業(yè)活動(dòng),一經(jīng)被相關(guān)人員發(fā)現(xiàn),本小編概不負(fù)責(zé)!

另外,需要指明的是希望讀者一天不要多次運(yùn)行本程序代碼,從而減少服務(wù)其負(fù)擔(dān)。

程序代碼或許還有一定的不足!沒有詳細(xì)地分析這兩個(gè)網(wǎng)址中的參數(shù),讀者有興趣的話,可以嘗試嘗試。如果讀者覺得小編的這篇文章還不錯(cuò)!離開的時(shí)候別忘了點(diǎn)上一個(gè)小小的贊!

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI