4、python分析酷我音樂
1、環境依賴:
需要安裝requests和jsonpath這兩個模塊
2、步驟:
(1)首先,進入酷我音樂官網

(2)滑鼠右鍵點擊檢查,選擇notework 這一欄中的Media 是篩選音頻檔案、視頻檔案的,點擊播放音樂時,就會出現一個以 .mp3 結尾的鏈接(下面我們隨機播放一首《白月光與朱砂痣》)

(3)雙擊第二個紅色框框:

https://gmsycdn.kuwo.cn/24f98891bc5dfcea33d18fc0bfba483e/6039162b/resource/n2/73/81/1062648582.mp3
這個URL地址就是音頻檔案地址!
(4)下面我們要根據音頻檔案地址找到音樂地址來源,我們從上面URL可以發現:其實后面的數字非常像音樂的ID,我們可以用開發者工具,搜索一下

(5)然后我們點擊這個可以看到一下資訊:

由上圖可以知道這個資料包回傳的內容包括音樂的URL真正來源地址,我們側視圖中也可以很明顯的看到如果想要獲取這個音樂的url就必須要有引數rid
我們再通過這個rid搜索一下:

這里顯示的是通過keyword去查找rid
(6)下面主要是代碼的實作:
import requests
import jsonpath
# cookies的時效性啊????session 保持cookies 維持回話
# 進入首頁 得到 cookies csrf保存在cookies里
def get_csrf():
url = 'https://kuwo.cn/'
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
# 'Cookie': '_ga=GA1.2.773350284.1614335668; _gid=GA1.2.764530357.1614335668; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1614335668; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1614343336; kw_token=9LVH3GVO6NG',
'Host': 'kuwo.cn',
'Pragma': 'no-cache',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
}
s.get(url, headers=headers)
csrf = s.cookies.get_dict()['kw_token']
return csrf
# 音樂的索引 特征值
def get_rid(csrf):
url = f'https://kuwo.cn/api/www/search/searchMusicBykeyWord?key={keyword}&pn=1&rn=30&httpsStatus=1'
headers = {
# 'Accept': 'application/json, text/plain, */*',
# 'Accept-Encoding': 'gzip, deflate, br',
# 'Accept-Language': 'zh-CN,zh;q=0.9',
# 'Cache-Control': 'no-cache',
# 'Connection': 'keep-alive',
# 'Cookie': '_ga=GA1.2.773350284.1614335668; _gid=GA1.2.764530357.1614335668; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1614335668; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1614341909; kw_token=3PB45UN366F',
'csrf': csrf,
# 'Host': 'kuwo.cn',
# 'Pragma': 'no-cache',
'Referer': f'https://kuwo.cn/search/list?key={keyword}',
# 'Sec-Fetch-Dest': 'empty',
# 'Sec-Fetch-Mode': 'cors',
# 'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
}
# 防止跨站點攻擊,
r = s.get(url, headers=headers).json()
rid = jsonpath.jsonpath(r, '$..rid')[0]
return rid
# 得到 音樂的下載地址
def get_music_url(rid):
# 下載一首歌
url = f'https://kuwo.cn/url?format=mp3&rid={rid}&response=url&type=convert_url3&br=128kmp3&from=web&t=1614342354424&httpsStatus=1'
headers = {
'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
# 'Cookie': '_ga=GA1.2.773350284.1614335668; _gid=GA1.2.764530357.1614335668; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1614335668; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1614342187; kw_token=PEL47GQVIED',
'Host': 'kuwo.cn',
'Pragma': 'no-cache',
'Referer': f'https://kuwo.cn/search/list?key={keyword}',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
}
r = s.get(url, headers=headers).json()
music_url = r.get("url")
return music_url
# 下載音樂
def get_music(music_url):
#requests.utils.unquote(keyword)將
with open(f'{requests.utils.unquote(keyword)}.mp3', 'wb') as f:
f.write(requests.get(music_url).content)
if __name__ == '__main__':
keyword = input('請輸入你需要下載的音樂名字:')
keyword = requests.utils.quote(keyword)
# 保持cookies 維持會話.
s = requests.session()
csrf = get_csrf()
rid = get_rid(csrf)
music_url = get_music_url(rid)
get_music(music_url)
說明:代碼中的headers資訊在這里獲取

(7)運行測驗:

下載成功!


3、總結
整個爬取酷我VIP音樂的流程大概有以下幾點:
- 獲取音樂的rid值
- 將得到的音樂rid值介面資料url當中,獲取音樂真實的url地址
- 請求音樂url地址 保存音樂檔案至本地
- 最后嘿嘿你喜歡的話就點個贊啦🤭
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/264495.html
標籤:python
