日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

网易云音乐接口解析

發(fā)布時(shí)間:2023/12/9 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网易云音乐接口解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們都知道,爬蟲(chóng)網(wǎng)易云音樂(lè)時(shí)候參數(shù)是經(jīng)過(guò)加密的,所以在分析網(wǎng)易云接口的時(shí)候要了解它的加密過(guò)程,下面來(lái)看看怎么實(shí)現(xiàn)爬蟲(chóng)的整個(gè)過(guò)程。

Part1 進(jìn)行網(wǎng)頁(yè)分析

  • 首先打開(kāi)網(wǎng)易云的網(wǎng)頁(yè)版
  • 點(diǎn)擊搜索音樂(lè),這里我們以音樂(lè):后來(lái),為例
  • Part2 進(jìn)行數(shù)據(jù)包分析

  • 鼠標(biāo)右鍵審查元素或者直接打開(kāi)F12,進(jìn)入調(diào)試界面,然后點(diǎn)擊網(wǎng)絡(luò)
  • 點(diǎn)擊播放按鈕,出現(xiàn)了如圖所示的數(shù)據(jù)包,點(diǎn)擊箭頭所指的數(shù)據(jù)包內(nèi)容
  • 這里得到了點(diǎn)擊播放返回的json數(shù)據(jù),里面包含了播放音樂(lè)的url,現(xiàn)在我們?cè)趺吹玫竭@個(gè)url呢
  • Part3 請(qǐng)求分析

  • 點(diǎn)擊請(qǐng)求頭,它這里利用的post請(qǐng)求,所以在瀏覽器地址欄直接打開(kāi)不會(huì)有對(duì)應(yīng)的信息

  • 這里查看它附加攜帶的參數(shù),這里post請(qǐng)求攜帶了兩個(gè)參數(shù),一個(gè)是params,一個(gè)是enSecKey,這兩個(gè)參數(shù)經(jīng)過(guò)了加密,然后附帶給post請(qǐng)求發(fā)送給服務(wù)器。才能得到j(luò)son結(jié)果,這里體現(xiàn)了網(wǎng)易云的強(qiáng)大加密,經(jīng)過(guò)發(fā)現(xiàn),這里的params和enSecKey主要對(duì)音樂(lè)id的加密

  • 分析加密過(guò)程,點(diǎn)擊發(fā)起程序,可以看到它的加密過(guò)程是由js加密的,在js代碼中搜索encSecKey關(guān)鍵詞定位到該部分,可以發(fā)現(xiàn)它的加密由asrsea函數(shù)加密

  • 這里找到加密函數(shù)asrsea=d,d為真正的加密函數(shù)

  • Part3 參數(shù)獲取

  • 這里我們雖然不能解密它的過(guò)程,但是我們可以利用歌曲的id進(jìn)行加密,在python中調(diào)用它的js加密函數(shù),得到它的加密參數(shù),從而構(gòu)造參數(shù)請(qǐng)求,這里利用一首歌的id進(jìn)行加密得到的兩個(gè)參數(shù),得到了參數(shù)之后,我們就可以構(gòu)造post請(qǐng)求

  • 這里利用得到的參數(shù)構(gòu)造post請(qǐng)求發(fā)送

  • 得到了請(qǐng)求的數(shù)據(jù),里面含有url真實(shí)的播放地址


  • Part4 搜索分析

    由搜索關(guān)鍵詞得到所有id,前面我們得到通過(guò)一首歌的id得到音樂(lè)播放url的真實(shí)地址,那么接下來(lái)我們?cè)趺赐ㄟ^(guò)搜索關(guān)鍵詞得到所有歌的id呢

  • 這里我們搜索一首大眠,怎么得到所有id的信息呢
  • 我們點(diǎn)擊搜索后,箭頭所指的數(shù)據(jù)包中含有我們搜索音樂(lè)的所有id,這時(shí)候我們就可以得到了id

  • 3. 這里我們看它的請(qǐng)求url也是post請(qǐng)求,后面沒(méi)發(fā)現(xiàn)請(qǐng)求參數(shù),我們?nèi)タ纯此欠裼烧?qǐng)求參數(shù)

  • 這里的仍然攜帶兩個(gè)參數(shù),params和encSecKey,和之前的一樣,經(jīng)過(guò)發(fā)現(xiàn),這里的參數(shù)是搜索關(guān)鍵詞經(jīng)過(guò)加密后的參數(shù)
  • 我們?cè)趐yhon中搜索"大眠",返回了大眠的加密參數(shù)
  • 得到了加密參數(shù)后,我們就可以構(gòu)造post請(qǐng)求了

  • 這里的話會(huì)返回所有歌曲的id的json數(shù)據(jù)包,就可以提取所有的id了

  • python代碼實(shí)現(xiàn)

    import requests import execjs def getSongInfo(songname):#得到搜索信息url='https://music.163.com/weapi/cloudsearch/get/web?csrf_token='params = ctx.call('keySet', songname)data = {'params': params['encText'],'encSecKey': params['encSecKey']}#得到的所有歌曲信息response = requests.post(url, data=data, headers=headers)#得到所有的歌曲信息songinfo=response.json()['result']['songs']song_name_list=[]song_id_list=[]#提取前三首的idfor i in range(3):id=songinfo[i]['id']name=songinfo[i]['ar'][0]['name']song_id_list.append(id)song_name_list.append(name)return song_id_list,song_name_listdef geturl(songid):url_list=[]for i in range(3):id=songid[i]# 請(qǐng)求urlurl = 'https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token='params=ctx.call('params',id)data = {'params': params['encText'],'encSecKey': params['encSecKey']}response=requests.post(url,data=data,headers=headers).json()geturl=response['data'][0]['url']url_list.append(geturl)return url_list if __name__=='__main__':#得到前三首歌的音樂(lè)idsongid,songname=getSongInfo(input("請(qǐng)輸入歌曲名字:\n"))urls=geturl(songid)for i in range(3):if(urls[i]):print(songname[i]+"\t\t\t"+urls[i])

    說(shuō)明:未經(jīng)作者許可,禁止轉(zhuǎn)載!!!如有侵權(quán),聯(lián)系作者刪除!!!

    總結(jié)

    以上是生活随笔為你收集整理的网易云音乐接口解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。