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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网易云音乐接口解析

發布時間:2023/12/9 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网易云音乐接口解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們都知道,爬蟲網易云音樂時候參數是經過加密的,所以在分析網易云接口的時候要了解它的加密過程,下面來看看怎么實現爬蟲的整個過程。

Part1 進行網頁分析

  • 首先打開網易云的網頁版
  • 點擊搜索音樂,這里我們以音樂:后來,為例
  • Part2 進行數據包分析

  • 鼠標右鍵審查元素或者直接打開F12,進入調試界面,然后點擊網絡
  • 點擊播放按鈕,出現了如圖所示的數據包,點擊箭頭所指的數據包內容
  • 這里得到了點擊播放返回的json數據,里面包含了播放音樂的url,現在我們怎么得到這個url呢
  • Part3 請求分析

  • 點擊請求頭,它這里利用的post請求,所以在瀏覽器地址欄直接打開不會有對應的信息

  • 這里查看它附加攜帶的參數,這里post請求攜帶了兩個參數,一個是params,一個是enSecKey,這兩個參數經過了加密,然后附帶給post請求發送給服務器。才能得到json結果,這里體現了網易云的強大加密,經過發現,這里的params和enSecKey主要對音樂id的加密

  • 分析加密過程,點擊發起程序,可以看到它的加密過程是由js加密的,在js代碼中搜索encSecKey關鍵詞定位到該部分,可以發現它的加密由asrsea函數加密

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

  • Part3 參數獲取

  • 這里我們雖然不能解密它的過程,但是我們可以利用歌曲的id進行加密,在python中調用它的js加密函數,得到它的加密參數,從而構造參數請求,這里利用一首歌的id進行加密得到的兩個參數,得到了參數之后,我們就可以構造post請求

  • 這里利用得到的參數構造post請求發送

  • 得到了請求的數據,里面含有url真實的播放地址


  • Part4 搜索分析

    由搜索關鍵詞得到所有id,前面我們得到通過一首歌的id得到音樂播放url的真實地址,那么接下來我們怎么通過搜索關鍵詞得到所有歌的id呢

  • 這里我們搜索一首大眠,怎么得到所有id的信息呢
  • 我們點擊搜索后,箭頭所指的數據包中含有我們搜索音樂的所有id,這時候我們就可以得到了id

  • 3. 這里我們看它的請求url也是post請求,后面沒發現請求參數,我們去看看它是否由請求參數

  • 這里的仍然攜帶兩個參數,params和encSecKey,和之前的一樣,經過發現,這里的參數是搜索關鍵詞經過加密后的參數
  • 我們在pyhon中搜索"大眠",返回了大眠的加密參數
  • 得到了加密參數后,我們就可以構造post請求了

  • 這里的話會返回所有歌曲的id的json數據包,就可以提取所有的id了

  • python代碼實現

    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]# 請求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__':#得到前三首歌的音樂idsongid,songname=getSongInfo(input("請輸入歌曲名字:\n"))urls=geturl(songid)for i in range(3):if(urls[i]):print(songname[i]+"\t\t\t"+urls[i])

    說明:未經作者許可,禁止轉載!!!如有侵權,聯系作者刪除!!!

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。