通過手動新增id從雲音樂介面一鍵下載音樂(Python3實現)
首先,談論下思路和準備工作。
思路是,先去網易雲音樂平臺試試水,看看各大音樂庫是否“有機可乘”。當然這過程是用谷歌Network監控瀏覽器與伺服器互動請求,如下圖:
結果發現,果然是大廠,竟然把相關的有歌曲重要資訊的json都給遮蔽了。
可以看到裡面都是些無關緊要的東西:
通過網路一些博主,瞭解到了一些有用的介面,可以直接獲取歌曲資訊,比如這個:
還有這個
結果發現,前者的重要欄位mp3Url缺失values值,而後者依賴song_id,沒有id無法獲取對應資訊。
如圖:
--沒有輸入id的情況:
我們要獲取什麼資訊呢,主要是歌曲下載連結,歌曲id,歌詞下載連結,之類的~
那麼完整流程是這樣的:獲取歌曲id,以獲取下載連結,若能獲取歌曲名最好,不能則命名,通過程式批量下載到指定資料夾,以新命名的名字儲存。
放下程式碼:
...
r = requests.get('https://music.163.com/api/playlist/detail?id=10169002')
arr = r.json()['result']['tracks'] #熱歌榜歌
# mp3_id = arr[i]['id'] #API變更,現在從id入手
# mp3_id = 27808044 #測試專用~~
這裡的http獲取連結是測試連結,是 #香港電臺音樂龍虎榜
通過瀏覽器開發者選項(Chrome裡)可看到json 的封裝層次:
需要注意的是:重新整理才可看到此請求
我們展開它,得到下圖:
按照程式碼邏輯,這樣mp3_id可以正常獲取到,但是筆者發現有點尷尬的是,只要是熱榜的歌曲,就算有歌曲id了,但是獲取不了,url。舉個列子:
圖中青春終老的id:574963447
去介面檢視url:很遺憾是空的
無奈,只能去非熱榜摳出歌曲id,但是非熱榜沒有查出對應介面可以列出全部歌曲id,
所以這些準備沒有用。只能通過美麗湯(BeautifulSoup)過濾或者,手動錄入。這裡筆者尚未用過美麗湯,暫時手動錄入。
於是有了:
L = [1294910785,32507038,557583281,557581967,471385043,574921549,415792881,417859631,27955653,27890306, 32192436,516657051,571340283,468517654,27955658,27955654,35528482,515803379,474567044,525241230,553543014, 466122271,27955656,518894283,412902689,32507039,27955652,169140,169137,429450375] #在薛之謙#個人專輯錄入 for i in range(30): print(L[i]) for mp3_id in L: # name = str(i+1) + ' ' + arr[i]['name'] + '.mp3' n = len(L) n = n - 1 global name name = str(mp3_id) + '_薛之謙.mp3' apiUrl = 'http://music.163.com/api/song/enhance/download/url?br=320000&id=' + str(mp3_id) #可以通過apiUrl查到Mp3的url print('apiUrl = ' + apiUrl) # print(name) # mp3_id = arr[i]['id'] #API變更,現在從id入手 # mp3_id = 27808044 #測試專用~~ newr = requests.get(apiUrl)
這裡可以看到是另命名的方式命名歌曲,以id+薛之謙.mp3命名,
newr可以獲取到單個歌曲的歌曲資訊,
通過正常的字典操作,獲取url
這樣就可以順利下載了。這裡因為已經下載就不下載了,複製程式碼檔案到其它目錄,dos環境下切換到此目錄,執行:
----
好的,收工。
放下完整程式碼:
# -*- coding: utf8 -*-
'this is a greate beginning'
__author__ = 'Hardy'
#python3.7.0
########import this
import requests #注意request庫和requests有根本區別,!去python.org官網的pypi裡下載正確的庫
import urllib
test = 'test'
#網易雲音樂下載-python爬蟲嘗試
#榜單歌曲批量下載
# r = requests.get('https://music.163.com/discover/toplist?id=19723756') #雲音樂飆升榜
# r = requests.get('https://music.163.com/api/playlist/detail?id=3779629') #雲音樂新歌榜
# r = requests.get('https://music.163.com/api/playlist/detail?id=2884035') #網易原創歌曲榜
# r = requests.get('https://music.163.com/api/playlist/detail?id=3778678') #雲音樂熱歌榜
r = requests.get('https://music.163.com/api/playlist/detail?id=10169002') #香港電臺音樂龍虎榜
# r = requests.get('https://music.163.com/api/playlist/detail?id=2250011882') #抖音排行榜
#歌單歌曲批量下載
# r = requests.get('https://music.163.com/api/playlist/detail?id=2388322013') #最是粵語最為情深 也唯獨你最難忘懷
# r = requests.get('https://music.163.com/api/playlist/detail?id=118289341') #♫鄉村音樂你是如此好聽
arr = r.json()['result']['tracks'] #熱歌榜歌
L = [1294910785,32507038,557583281,557581967,471385043,574921549,415792881,417859631,27955653,27890306,
32192436,516657051,571340283,468517654,27955658,27955654,35528482,515803379,474567044,525241230,553543014,
466122271,27955656,518894283,412902689,32507039,27955652,169140,169137,429450375]
for i in range(30):
print(L[i])
for mp3_id in L:
# name = str(i+1) + ' ' + arr[i]['name'] + '.mp3'
n = len(L)
n = n - 1
global name
name = str(mp3_id) + '_薛之謙.mp3'
apiUrl = 'http://music.163.com/api/song/enhance/download/url?br=320000&id=' + str(mp3_id) #可以通過apiUrl查到Mp3的url
print('apiUrl = ' + apiUrl)
# print(name)
# mp3_id = arr[i]['id'] #API變更,現在從id入手
# mp3_id = 27808044 #測試專用~~
newr = requests.get(apiUrl)
s = str(mp3_id)
if s == '':
print('error,now we can\'t download it')
else:
n_arr = newr.json()['data']['url'] #這裡正常情況下可以獲取url
if n_arr != '':
link = n_arr
urllib.request.urlretrieve(link,'網易雲音樂\\' + name)
print(name + ' 下載完成')
print('Download Completed!!!')
#歌詞:http://music.163.com/api/song/media?id=429450375
#單曲Json包:http://music.163.com/api/song/enhance/download/url?br=320000&id=429450375
#歌曲播放器: https://music.163.com/api/song/enhance/player/url
# https://music.163.com/api/song/enhance/download/url?br=320000&id=28445467 --歌曲下載 id為歌曲id,br為播放位元速率
# 介面資料用的id=123456&ids=[123456]&br=3200000 --經測試可用,請各位合理使用,免得又被封禁
環境準備說明:Python3、Requests庫、request庫 (庫都是在Python.org官網的Pypi選單裡下的)、BeautifulSoup庫。Sublime程式碼編輯器、Chrome瀏覽器、一定硬碟空間。
美中不足的是此此操作沒有用美麗湯完成。
需要注意的是:在程式碼路徑需要建立名為“網易雲音樂”的目錄
關於庫的一些小技巧:新建個檔案以py結尾:
裡面輸入匯入庫的code:然後按Ctrl+B執行
如果沒有以下提示是正常的
正確的結果:
好的,就寫到這。