经过测试,可以下载要付费下载的歌曲(n_n)
准备工作:Python3.5+Pycharm
使用到的库:requests,re,json,time,fakeuseragent
步骤:
打开酷狗音乐的官网,输入想要搜索的歌曲(例如《天后》),然后回车搜索,得到如下页面:
右键检查或者按F12打开开发者工具,点击JS选项,查找到如下信息,FileName就是返回的歌手名和歌曲名信息,我们要将其提取出来:
由于这个网址返回的不是标准的json格式,所以要先进行如下处理,然后再转换成json格式:
res = requests.get(url).text
js = json.loads(res[res.index('(') + 1:-2])
提取到歌曲信息之后,我们输入一个序号代表要下载的歌曲序号,然后把歌曲下载下来就好了。
运行截图:
附上源码:
1 """ 2 Version: Python3.5 3 Author: OniOn 4 Site: http://www.cnblogs.com/TM0831/ 5 Time: 2019/2/15 12:07 6 """ 7 import re 8 import json 9 import time 10 import requests 11 from fake_useragent import UserAgent 12 13 ua = UserAgent() 14 15 16 def get_song(song_name): 17 search_url = "https://songsearch.kugou.com/song_search_v2?callback=jQuery112405132987859127838_1550204317910&page" \ 18 "=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_fil" \ 19 "ter=0&_=1550204317912&keyword={}".format(song_name) 20 headers = { 21 "UserAgent": ua.random 22 } 23 res = requests.get(search_url, headers=headers) 24 start = re.search("jQuery\d+_\d+\(?", res.text) 25 js = json.loads(res.text.strip().lstrip(start.group()).rstrip(")")) # 注意:末尾有一个换行需要去掉 26 song_list = js['data']['lists'] 27 28 for i in range(10): 29 print(str(i + 1) + ">>>" + str(song_list[i]['FileName']).replace('<em>', '').replace('</em>', '')) 30 31 num = int(input("\n请输入您想要下载的歌曲序号:")) 32 33 print("请稍等,下载歌曲中...") 34 time.sleep(1) 35 36 file_hash = song_list[num-1]['FileHash'] 37 38 hash_url = "http://www.kugou.com/yy/index.php?r=play/getdata&hash={}".format(file_hash) 39 hash_res = requests.get(hash_url,headers=headers) 40 hash_js = hash_res.json() # json格式 41 play_url = hash_js['data']['play_url'] 42 43 # 下载歌曲 44 try: 45 with open("music/" + song_name + ".mp3", "wb")as fp: 46 fp.write(requests.get(play_url).content) 47 print("歌曲已下载完成!") 48 except Exception as e: 49 print(e) 50 51 52 if __name__ == '__main__': 53 get_song(input("请输入您想要搜索的歌曲名称:"))