python萌新笔记----基于requests库请求API下载网易云(VIP)音乐
生活随笔
收集整理的這篇文章主要介紹了
python萌新笔记----基于requests库请求API下载网易云(VIP)音乐
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.題記
偶然的情況下了解到了關于API的一些妙用,利用所學知識使用目前網上公開的API來獲取需要付費才能下載的網易云音樂。
二.API的粗淺看法
目前感覺就是設置了網頁請求頭中params的響應參數之后,訪問API接口,對方就會返回一系列json數據,從這些json數據可以抽取出音樂文件的鏈接,由于現在網絡信息更新很快,讀者想要API可以自行百度,實時更新,避免接口失效
三.思路
1.設置請求頭信息,主要是params里的參數,相應的鍵值需要分析網頁
2.請求API獲得json數據,分析json數據,根據字典的相應語法取出想要的數據,每首歌曲都有自己的ID號碼,首先需要取出這個數據
3.通過ID號定位找到歌曲的鏈接,下載歌曲
4.優化交互界面
四.代碼實現及運行
import requests import jsonclass MyMusic(object):def __init__(self):# 設置請求頭self.url = "https://api.imjad.cn/cloudmusic/" # apiself.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",}self.params_search = {'type': 'search','search_type': str(1),'limit': str(20),#返回20個搜索結果's': '',#歌手'offset': str(0)}self.params_download = {'type': 'song','id': '',#歌曲ID'br': str(320000),#高品質的音質}def SearchData(self, name):#響應的json數據self.params_search['s'] = nameresponse = requests.get(url=self.url, headers=self.headers, params=self.params_search)html = response.json()return htmldef SearchList(self, name):#打印搜索列表html = self.SearchData(name)song_id = []song_name = []song_author = []try:for i in range(20):#params里設置的搜索返回20條數據song_id.append(html["result"]["songs"][i]['id'])song_name.append(html["result"]["songs"][i]['name'])song_author.append(html["result"]["songs"][i]['ar'][0]['name'])print('(ID:' + str(song_id[i]) + ')歌名:' + song_name[i] + ' ------ 歌手:' + song_author[i])except Exception:passdef SearchSong(self, name, author):#匹配歌手,返回id號html = self.SearchData(name)for i in range(20):if html["result"]["songs"][i]['ar'][0]['name'] == author:return html["result"]["songs"][i]['id']def DownLoad(self, id):#下載self.params_download['id'] = idresponse = requests.get(url=self.url, headers=self.headers, params=self.params_download)url = response.json()['data'][0]['url']print("正在下載:" + self.params_search['s'])response = requests.get(url, headers=self.headers)filename = "music\\" + self.params_search['s'] + ".mp3"with open(filename, 'wb')as f:f.write(response.content)print("下載成功!")def run(self):print("@程序優化中,歌名歌手輸入框出現繁體或片假名則不能正常運行\n""@歌曲框輸入exit退出程序\n""@歌手框輸入exit則放棄操作\n")while(True):try:name = input("請輸入歌曲名稱: ")if name == 'exit':breakprint('======================搜索到的歌曲====================')self.SearchList(name)id = (input("請輸入歌手名稱或歌曲ID: "))if id == 'exit':continueelif str.isdigit(id):#輸入的是ID號,則直接下載self.DownLoad(id)else:#輸入的是歌手名字,匹配ID號id = str(self.SearchSong(name, id))self.DownLoad(id)except Exception:print("哎呀!下載出錯了!可能原因如下\n" "1.您下載的歌熱度不高哦\n" "2.請確保該歌曲在網易云搜索到\n" "3.程序崩潰了@_@")passt = MyMusic() t.run()運行結果:
五.總結
如果復制代碼需要創建music文件夾。。。代碼不是很完善,歡迎大家和我一起交流或指教@_@
總結
以上是生活随笔為你收集整理的python萌新笔记----基于requests库请求API下载网易云(VIP)音乐的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webview代码实例化_WebView
- 下一篇: Python代码编辑器jupyter的安