Python爬蟲(chóng)實(shí)戰(zhàn)之網(wǎng)易云音樂(lè)加密解析附源碼
環(huán)境
- python3.8
- pycharm2021.2
知識(shí)點(diǎn)
- requests >>> pip install requests
- execjs >>> pip install PyExecJS
第一步
打開(kāi)這個(gè)網(wǎng)站 在里面去分析我們需要的數(shù)據(jù) 每個(gè)音樂(lè)的名稱 id
去網(wǎng)頁(yè)源代碼查找數(shù)據(jù),發(fā)現(xiàn)并沒(méi)有,這個(gè)網(wǎng)頁(yè) 并不是一個(gè)靜態(tài)頁(yè)面
打開(kāi)開(kāi)發(fā)者工具,找到歌曲的id
找到真正的目標(biāo)網(wǎng)址https://music.163.com/discover/toplist
【付費(fèi)VIP完整版】只要看了就能學(xué)會(huì)的教程,80集Python基礎(chǔ)入門(mén)視頻教學(xué)
點(diǎn)這里即可免費(fèi)在線觀看
第二步
通過(guò)代碼去實(shí)現(xiàn)當(dāng)前這一個(gè)步驟
- 通過(guò)代碼去訪問(wèn)當(dāng)這個(gè)頁(yè)面 – 拿到網(wǎng)頁(yè)源代碼
- 提取我們真正想要的 音樂(lè)的名稱 id
- 下載音樂(lè): id獲取是為了下載音樂(lè)分析里面音樂(lè)數(shù)據(jù)的 加密規(guī)則 去下載歌曲
開(kāi)始代碼
先導(dǎo)入所需模塊
import requests import re import execjs
請(qǐng)求數(shù)據(jù)
# 通過(guò)代碼去訪問(wèn)當(dāng)這個(gè)頁(yè)面 -- 拿到網(wǎng)頁(yè)源代碼 url = 'https://music.163.com/discover/toplist' # 偽裝 headers = { 'cookie': '_ntes_nuid=063717de540d3ec18d9b4a0bdf51e931; WM_TID=sxztjH%2FJbYZBEREFBQZvAgttUnJPrvYf; ntes_kaola_ad=1; NMTID=00OSBNvfChgV2TD7k5IhSzky6R8lXgAAAF0zoWmoA; _ntes_nnid=063717de540d3ec18d9b4a0bdf51e931,1607344992641; _iuqxldmzr_=32; OUTFOX_SEARCH_USER_ID_NCOO=2145381542.3273497; WEVNSM=1.0.0; WNMCID=sazafu.1624080681192.01.0; UM_distinctid=17b784cb58a17-097be09ee87fb9-c343365-1aeaa0-17b784cb58b8bc; __root_domain_v=.163.com; _qddaz=QD.159230735652240; vinfo_n_f_l_n3=11aae7905aa2179b.1.11.1575470964063.1625470009945.1632894007779; usertrack=ezq0J2FlcQWNYypxAx88Ag==; JSESSIONID-WYYY=Yvm62%5Cnd8XNkT2ryCNOJx9urqXsxCDMF6srNnGRegtmuNdB5MrrS9ou%2FWw3JbVf960uHnGW3Bb%2Fbhv2xZm3Vn%2B%2BonZSX38sqKiUMuRd6TDKD39HRzGmrZ%5Cp9IUaNs%5C5nYt9xltJBt5qRgWsl0PZsxDhSu26ugGAozPffXXAjemm0o%2Fv%5C%3A1634111694844; WM_NI=au9XpuutN3GwymEoZsAgWl6%2BH4cTcHgYKos%2BWibR3hSntTQhrpX%2FLoCAycOKLnZteLb1LlluoIk9jlKxaaUThS4tfZr9jWB3LVjXKQUH4%2BMpukbEPcnHaN80J8%2FhoqeeYms%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee8de74b85b18eb3b27bae8e8ab2d44e969f9aafae3388af8f98d06da59b968ecf2af0fea7c3b92aa3abf7b9f37fb7ac82d4c67dbbb38b90d97983b9998db5218cecadb5e244a5878590f22195b7aeb3b26491b2bcb5d464b2b098d0cf65819fb784ce4190b29695e848a2ef848def7fad97a5dae96889a8af82d860ac8dfc95e552b2e7a6b8c139908aa6b9ca5b9798fcccd07cb7b5aea6d369ae98afafbb3c8ae8e189ee7ba7bb978ef237e2a3; playerid=29374327', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36' } # url: 分析出來(lái)的真正數(shù)據(jù)鏈接 # headers: 偽裝請(qǐng)求頭 response = requests.get(url, headers).text # <Response [200]>: 告訴你訪問(wèn)成功了
提取我們真正想要的 音樂(lè)的名稱 id
zip_data = re.findall('<li><a href="/song\?id=(.*?)" rel="external nofollow" rel="external nofollow" >(.*?)</a></li>', response) for music_id, title in zip_data: # url_1 = 'http://music.163.com/song/media/outer/url?id=' + music_id url_1 = 'https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=' result = ctx.call('start', music_id) data = { 'params': result['encText'], 'encSecKey': result['encSecKey'] } # 發(fā)送請(qǐng)求 # 當(dāng)前的音樂(lè)數(shù)據(jù) music_url = requests.post(url_1, data=data, headers=headers).json()['data'][0]['url'] music_data = requests.get(music_url, headers).content title = re.sub(r'[/\\:*?"<>|]', '_', title)
導(dǎo)入js文件
# js文件導(dǎo)入 js = open('music163.js', mode='r', encoding='utf-8').read() ctx = execjs.compile(js)
保存文件
with open('music/' + title + '.mp3', mode='wb') as f: f.write(music_data) print(title)
完整代碼
import requests import re import execjs url = 'https://music.163.com/discover/toplist' # 偽裝 headers = { 'cookie': '_ntes_nuid=063717de540d3ec18d9b4a0bdf51e931; WM_TID=sxztjH%2FJbYZBEREFBQZvAgttUnJPrvYf; ntes_kaola_ad=1; NMTID=00OSBNvfChgV2TD7k5IhSzky6R8lXgAAAF0zoWmoA; _ntes_nnid=063717de540d3ec18d9b4a0bdf51e931,1607344992641; _iuqxldmzr_=32; OUTFOX_SEARCH_USER_ID_NCOO=2145381542.3273497; WEVNSM=1.0.0; WNMCID=sazafu.1624080681192.01.0; UM_distinctid=17b784cb58a17-097be09ee87fb9-c343365-1aeaa0-17b784cb58b8bc; __root_domain_v=.163.com; _qddaz=QD.159230735652240; vinfo_n_f_l_n3=11aae7905aa2179b.1.11.1575470964063.1625470009945.1632894007779; usertrack=ezq0J2FlcQWNYypxAx88Ag==; JSESSIONID-WYYY=Yvm62%5Cnd8XNkT2ryCNOJx9urqXsxCDMF6srNnGRegtmuNdB5MrrS9ou%2FWw3JbVf960uHnGW3Bb%2Fbhv2xZm3Vn%2B%2BonZSX38sqKiUMuRd6TDKD39HRzGmrZ%5Cp9IUaNs%5C5nYt9xltJBt5qRgWsl0PZsxDhSu26ugGAozPffXXAjemm0o%2Fv%5C%3A1634111694844; WM_NI=au9XpuutN3GwymEoZsAgWl6%2BH4cTcHgYKos%2BWibR3hSntTQhrpX%2FLoCAycOKLnZteLb1LlluoIk9jlKxaaUThS4tfZr9jWB3LVjXKQUH4%2BMpukbEPcnHaN80J8%2FhoqeeYms%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee8de74b85b18eb3b27bae8e8ab2d44e969f9aafae3388af8f98d06da59b968ecf2af0fea7c3b92aa3abf7b9f37fb7ac82d4c67dbbb38b90d97983b9998db5218cecadb5e244a5878590f22195b7aeb3b26491b2bcb5d464b2b098d0cf65819fb784ce4190b29695e848a2ef848def7fad97a5dae96889a8af82d860ac8dfc95e552b2e7a6b8c139908aa6b9ca5b9798fcccd07cb7b5aea6d369ae98afafbb3c8ae8e189ee7ba7bb978ef237e2a3; playerid=29374327', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36' } response = requests.get(url, headers).text zip_data = re.findall('<li><a href="/song\?id=(.*?)" rel="external nofollow" rel="external nofollow" >(.*?)</a></li>', response) js = open('music163.js', mode='r', encoding='utf-8').read() ctx = execjs.compile(js) for music_id, title in zip_data: url_1 = 'https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=' result = ctx.call('start', music_id) data = { 'params': result['encText'], 'encSecKey': result['encSecKey'] } music_url = requests.post(url_1, data=data, headers=headers).json()['data'][0]['url'] music_data = requests.get(music_url, headers).content title = re.sub(r'[/\\:*?"<>|]', '_', title) with open('music/' + title + '.mp3', mode='wb') as f: f.write(music_data) print(title)
到此這篇關(guān)于Python爬蟲(chóng)實(shí)戰(zhàn)之網(wǎng)易云音樂(lè)加密解析附源碼的文章就介紹到這了,更多相關(guān)Python 網(wǎng)易云音樂(lè)解析內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。