第一次創作,請多指教
環境:Python3.8,開發工具:Pycharm
第三方庫:requests
詳細
進入酷我音樂的網站到搜索界面
輸入歌名進去打開開發者工具會發現這個包
它里面包含了這一頁的音樂資料,我們需要的是這個引數
然后開始寫代碼吧,先找到所需的音樂資料
import requests
import json
import os
def music_download():
kw = input("請輸入音樂名稱:")
# 請求頭
headers = {xian
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36 Edg/84.0.522.63",
"Cookie":"_ga=GA1.2.1083049585.1590317697; _gid=GA1.2.2053211683.1598526974; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1597491567,1598094297,1598096480,1598526974; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1598526974; kw_token=HYZQI4KPK3P",
"Referer": "http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6",
"csrf": "HYZQI4KPK3P",
}
# 引數串列
params = {
"key": kw,
# 頁數
"pn": "1",
# 音樂數
"rn": "10",
"httpsStatus": "1",
"reqId": "cc337fa0-e856-11ea-8e2d-ab61b365fb50",
}
# 創建串列,后面下載需要
music_list = []
url = "http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?"
res = requests.get(url = url,headers = headers,params = params)
res.encoding = "utf-8"
text = res.text
# 轉成json資料
json_list = json.loads(text)
# 發現data中list是存主要資料的地方
datapack = json_list["data"]["list"]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
接下來是重要的地方
先隨便試聽一首音樂,找到他的json資料
我們發現這個json資料里含有.mp3的鏈接,這就是音樂檔案
復制他的url,進去看是一個介面
他的url有規律,之前我們提取的rid引數就起了作用,把它復制到鏈接里,這里看代碼吧
# 遍歷拿到所需要的資料,音樂名稱,歌手,id...
for i in datapack:
# 音樂名
music_name = i["name"]
# 歌手
music_singer = i["artist"]
# 待會需要的id先拿到
rid = i["rid"]
# 隨便試聽拿到一個音樂的介面,這是的rid就用得上了
api_music = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3" \
"&br=128kmp3&from=web&t=1598528574799&httpsStatus=1" \
"&reqId=72259df1-e85a-11ea-a367-b5a64c5660e5".format(rid)
api_res = requests.get(url = api_music)
# 列印發現真實的url確實在里面
# print(api_res.text)
music_url = json.loads(api_res.text)["url"]
# 大功告成,試試效果
print(music_name)
print(music_singer)
print(music_url)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
順便寫了個方便下載的功能
# 在此之前先創建串列
music_list = []
- 1
- 2
函式體內建一個字典方便保存歌名與音樂資料
# 把資料存到字典方便下載時查找
music_dict = {}
music_dict["name"] = music_name
music_dict["url"] = music_url
music_dict["singer"] = music_singer
music_list.append(music_dict)
# 看看真實資料數量
print(len(music_list))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
遍歷之前的串列資料進行判斷,利用索引找到指定的url
# 下載
xiazai = input("輸入要下載的音樂名稱:")
# 下載位置
root = 'E://下載的music//'
# 每個字典里有name和url
for i in range(len(music_list)):
try:
if xiazai == music_list[i]["name"]:
# 創建檔案夾
if not os.path.exists(root):
os.mkdir(root)
# 拿到字典中對應的音樂url資料
music_content = requests.get(url = music_list[i]["url"]).content
with open(root + "{}.mp3".format(music_list[i]['name']),"wb") as f:
f.write(music_content)
print("下載成功")
except:
print("下載失敗")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
然后就可以愉快的下載付費音樂啦
完整代碼
import requests
import json
import os
def music_download():
kw = input("請輸入音樂名稱:")
# 請求頭
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36 Edg/84.0.522.63",
"Cookie":"_ga=GA1.2.1083049585.1590317697; _gid=GA1.2.2053211683.1598526974; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1597491567,1598094297,1598096480,1598526974; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1598526974; kw_token=HYZQI4KPK3P",
"Referer": "http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6",
"csrf": "HYZQI4KPK3P",
}
# 引數串列
params = {
"key": kw,
# 頁數
"pn": "1",
# 音樂數
"rn": "10",
"httpsStatus": "1",
"reqId": "cc337fa0-e856-11ea-8e2d-ab61b365fb50",
}
# 創建串列,后面下載需要
music_list = []
url = "http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?"
res = requests.get(url = url,headers = headers,params = params)
res.encoding = "utf-8"
text = res.text
# 轉成json資料
json_list = json.loads(text)
# 發現data中list是存主要資料的地方
datapack = json_list["data"]["list"]
# 遍歷拿到所需要的資料,音樂名稱,歌手,id...
for i in datapack:
# 音樂名
music_name = i["name"]
# 歌手
music_singer = i["artist"]
# 待會需要的id先拿到
rid = i["rid"]
# 隨便試聽拿到一個音樂的介面,這是的rid就用得上了
api_music = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3" \
"&br=128kmp3&from=web&t=1598528574799&httpsStatus=1" \
"&reqId=72259df1-e85a-11ea-a367-b5a64c5660e5".format(rid)
api_res = requests.get(url = api_music)
# 列印發現真實的url確實在里面
# print(api_res.text)
music_url = json.loads(api_res.text)["url"]
# 大功告成,試試效果
print(music_name)
print(music_singer)
print(music_url)
# 把資料存到字典方便下載時查找
music_dict = {}
music_dict["name"] = music_name
music_dict["url"] = music_url
music_dict["singer"] = music_singer
music_list.append(music_dict)
# 看看真實資料數量
print(len(music_list))
# 下載
xiazai = input("輸入音樂名稱:")
# 下載位置
root = 'E://下載的music//'
for i in range(len(music_list)):
try:
if xiazai == music_list[i]["name"]:
# 創建檔案夾
if not os.path.exists(root):
os.mkdir(root)
# 拿到字典中對應的音樂url資料
music_content = requests.get(url = music_list[i]["url"]).content
with open(root + "{}({}).mp3".format(music_list[i]['name'],music_list[i]['singer']),"wb") as f:
f.write(music_content)
print