亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python爬蟲(chóng)實(shí)戰(zhàn)之網(wǎng)易云音樂(lè)加密解析附源碼

 更新時(shí)間:2021年10月15日 08:51:36   作者:松鼠愛(ài)吃餅干  
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,學(xué)的扎不扎實(shí)要通過(guò)實(shí)戰(zhàn)才能看出來(lái),本篇文章手把手帶你解析網(wǎng)易云音樂(lè)數(shù)據(jù),大家可以在實(shí)戰(zhàn)過(guò)程中更有效的掌握python

環(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è)的名稱(chēng) 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è)的名稱(chēng) 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è)的名稱(chēng) 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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python如何重載模塊實(shí)例解析

    python如何重載模塊實(shí)例解析

    這篇文章主要介紹了python如何重載模塊實(shí)例解析,涉及模塊的概念,載入和重載的實(shí)例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python?日期和時(shí)間處理教程之datetime?模塊的使用示例詳解

    Python?日期和時(shí)間處理教程之datetime?模塊的使用示例詳解

    Python 中的日期不是獨(dú)立的數(shù)據(jù)類(lèi)型,但我們可以導(dǎo)入一個(gè)名為 datetime 的模塊來(lái)使用日期作為日期對(duì)象,這篇文章主要介紹了Python?日期和時(shí)間處理教程:datetime?模塊的使用,需要的朋友可以參考下
    2023-10-10
  • Pandas日期處理之生成工作日與節(jié)假日

    Pandas日期處理之生成工作日與節(jié)假日

    Python中的Pandas 提供了許多日期處理功能,使得處理時(shí)間序列數(shù)據(jù)變得容易。本文將介紹如何使用 Pandas 生成工作日和節(jié)假日,感興趣的小伙伴可以收藏一下
    2023-05-05
  • python實(shí)現(xiàn)掃描日志關(guān)鍵字的示例

    python實(shí)現(xiàn)掃描日志關(guān)鍵字的示例

    下面小編就為大家分享一篇python實(shí)現(xiàn)掃描日志關(guān)鍵字的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 在Django的視圖中使用form對(duì)象的方法

    在Django的視圖中使用form對(duì)象的方法

    這篇文章主要介紹了在Django的視圖中使用form對(duì)象的方法,Django是Python豐富多彩的開(kāi)發(fā)框架中最具有人氣的一個(gè),需要的朋友可以參考下
    2015-07-07
  • Python圖片視頻超分模型RealBasicVSR的使用教程

    Python圖片視頻超分模型RealBasicVSR的使用教程

    這篇文章主要和大家分享一個(gè)有意思的模型:RealBasicVSR。這個(gè)模型可以實(shí)現(xiàn)圖片或視頻的超分處理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-05-05
  • python中使用paramiko模塊并實(shí)現(xiàn)遠(yuǎn)程連接服務(wù)器執(zhí)行上傳下載功能

    python中使用paramiko模塊并實(shí)現(xiàn)遠(yuǎn)程連接服務(wù)器執(zhí)行上傳下載功能

    paramiko是用python語(yǔ)言寫(xiě)的一個(gè)模塊,遵循SSH2協(xié)議,支持以加密和認(rèn)證的方式,進(jìn)行遠(yuǎn)程服務(wù)器的連接。這篇文章主要介紹了python中使用paramiko模塊并實(shí)現(xiàn)遠(yuǎn)程連接服務(wù)器執(zhí)行上傳下載功能,需要的朋友可以參考下
    2020-02-02
  • pytest內(nèi)置fixture使用臨時(shí)目錄流程詳解

    pytest內(nèi)置fixture使用臨時(shí)目錄流程詳解

    fixture是在測(cè)試函數(shù)運(yùn)行前后,由pytest執(zhí)行的外殼函數(shù)。fixture中的代碼可以定制,滿足多變的測(cè)試需求,包括定義傳入測(cè)試中的數(shù)據(jù)集、配置測(cè)試前系統(tǒng)的初始狀態(tài)、為批量測(cè)試提供數(shù)據(jù)源等等。fixture是pytest的精髓所在
    2022-12-12
  • 在Ubuntu中安裝并配置Pycharm教程的實(shí)現(xiàn)方法

    在Ubuntu中安裝并配置Pycharm教程的實(shí)現(xiàn)方法

    這篇文章主要介紹了在Ubuntu中安裝并配置Pycharm教程的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python打包模塊wheel的使用方法與將python包發(fā)布到PyPI的方法詳解

    Python打包模塊wheel的使用方法與將python包發(fā)布到PyPI的方法詳解

    這篇文章主要介紹了Python打包模塊wheel的使用方法與將python包發(fā)布到PyPI的方法詳解,需要的朋友可以參考下
    2020-02-02

最新評(píng)論