欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【Python3爬虫】下载酷狗音乐上的歌曲

程序员文章站 2022-04-24 15:59:07
经过测试,可以下载要付费下载的歌曲(n_n) 准备工作:Python3.5+Pycharm 使用到的库:requests,re,json 步骤: 打开酷狗音乐的官网,输入想要搜索的歌曲(例如《天后》),然后回车搜索,得到如下页面: 右键检查或者按F12打开开发者工具,点击JS选项,查找到如下信息,F ......

经过测试,可以下载要付费下载的歌曲(n_n)

 

准备工作:python3.5+pycharm

使用到的库:requests,re,json

 

步骤:

   打开酷狗音乐的官网,输入想要搜索的歌曲(例如《天后》),然后回车搜索,得到如下页面:

【Python3爬虫】下载酷狗音乐上的歌曲

 

    右键检查或者按f12打开开发者工具,点击js选项,查找到如下信息,filename就是返回的歌手名和歌曲名信息,我们要将其提取出来:

【Python3爬虫】下载酷狗音乐上的歌曲

   由于这个网址返回的不是标准的json格式,所以要先进行如下处理,然后再转换成json格式:

res = requests.get(url).text
js = json.loads(res[res.index('(') + 1:-2])
提取到歌曲信息之后,我们输入一个序号代表要下载的歌曲序号,然后把歌曲下载下来就好了。



运行截图:
【Python3爬虫】下载酷狗音乐上的歌曲

 

附上源码:
 1 import requests
 2 import json
 3 import re
 4 
 5 
 6 def get_song(x):
 7     url = "http://songsearch.kugou.com/song_search_v2?callback=jquery112407470964083509348_1534929985284&keyword={}&" \
 8           "page=1&pagesize=30&userid=-1&clientver=&platform=webfilter&tag=em&filter=2&iscorrection=1&privilege_filte" \
 9           "r=0&_=1534929985286".format(x)
10     res = requests.get(url).text
11     js = json.loads(res[res.index('(') + 1:-2])
12     data = js['data']['lists']
13     for i in range(10):
14         print(str(i + 1) + ">>>" + str(data[i]['filename']).replace('<em>', '').replace('</em>', ''))
15     number = int(input("\n请输入要下载的歌曲序号(输入-1退出程序): "))
16     if number == -1:
17         exit()
18     else:
19         name = str(data[number - 1]['filename']).replace('<em>', '').replace('</em>', '')
20         fhash = re.findall('"filehash":"(.*?)"', res)[number - 1]
21         hash_url = "http://www.kugou.com/yy/index.php?r=play/getdata&hash=" + fhash
22         hash_content = requests.get(hash_url)
23         play_url = ''.join(re.findall('"play_url":"(.*?)"', hash_content.text))
24         real_download_url = play_url.replace("\\", "")
25         with open(name + ".mp3", "wb")as fp:
26             fp.write(requests.get(real_download_url).content)
27         print("歌曲已下载完成!")
28 
29 
30 if __name__ == '__main__':
31     x = input("请输入歌名:")
32     get_song(x)