本文来源吾爱破解论坛
本帖最后由 zphyix 于 2019-3-14 22:50 编辑
测试程序是否可用:搜索陈奕迅,选择一首歌(如十年)无损音质下载,若能成功下载歌曲文件并且歌曲能够播放,则程序正确运行。
3/14/22:47 更新: 关于评论区反映的无法下载问题,有可能是api不稳定的问题,自己这边测试是没问题的~
另:有能力的同学可以尝试自己写写,作为一个Python小爬虫的练习,欢迎分享源码,共同进步~
3/13/20:00 更新:经测试,有些歌曲由于不存在高品质、无损音质版本,所以此时选择高品质会下载失败,应该降低音质。
无需VIP下载QQ音乐高品质歌曲
吾爱新人,将自己写的一个免费下载QQ音乐 Python 程序分享出来
采用的是 Mrdong916 大佬分享的 api : https://blog.csdn.net/sinat_27938829/article/details/85951579
运行结果:
runtime.jpg (98.21 KB, 下载次数: 2)
下载附件
保存到相册
运行环境: Python 3 (Linux 或 windows 系统均可)
使用方法:
安装Python3 安装程序依赖: pip install requests 将代码保存为 music.py,在命令行运行 python music.py# -*- coding:utf-8 -*-
'''
输入要下载的音乐名称,返回搜索结果
用户选择搜索结果中需要下载的音乐并选择需要下载的音质
下载歌曲
'''
import os
import random
import requests
base_api = 'https://api.bzqll.com/music/tencent/'
agents = [
"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20",
"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110622 Firefox/6.0a2",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
]
headers = {
'User-Agent': random.choice(agents)
}
def searchMusic():
while 1: # input music name
try:
music_name = input("请输入要下载的音乐内容(歌手名或歌曲名均可):")
url = base_api + 'search?key=579621905&s={}&limit=10&offset=0&type=song'.format(music_name)
html = requests.get(url)
songs = html.json()
if songs['data'] != []:
songs_info = songs['data']
count = 0
for song in songs_info:
count = count + 1
print("{}: {}--{}".format(count,song["name"],song["singer"]))
while 1: # input check
try:
song_id = int(input("请选择要下载的歌曲:"))
if song_id <= 0 or song_id >count:
print("请输入1-{}之间的正整数!".format(count))
continue
else:
break
except ValueError:
print("请输入1-{}之间的正整数!".format(count))
continue
return songs_info[song_id-1]
except:
print("请求失败,请重试!")
continue
'''
传入歌曲信息,下载歌曲
'''
def getMusic(song_info):
mid = song_info["id"]
quality = ['48','96','320','ape','flac']
file_type = ['m4a','m4a','mp3','ape','flac']
print("1:标准品质 2:高清品质 3:高品质(HQ) 4:无损压缩(ape) 5:无损音质(flac)")
while 1: # input check
try:
qua = int(input("请选择要下载的音质:"))
if qua <= 0 or qua >5:
print("请输入1-5之间的正整数!")
continue
else:
break
except ValueError:
print("请输入1-5之间的正整数!")
continue
url = base_api+'url?key=579621905&id={}&br={}'.format(mid,quality[qua-1])
status = saveSong(url=url,song_info=song_info,file_type=file_type[qua-1])
if status == 1:
status = saveSong(url=song_info['url'],song_info=song_info,file_type=file_type[2])
def saveSong(url,song_info,file_type):
try:
file_dir = "Music"
floder = os.path.exists(file_dir)
if not floder:
os.mkdir(file_dir)
print("Create dir success~")
file_path = file_dir+'/'+song_info["name"]+'-'+song_info["singer"]+'.'+file_type
music_file = os.path.exists(file_path)
if not music_file:
with open(file_path, 'wb') as f:
print("开始下载,请稍等(无损音质文件较大需较长时间):")
music_html = requests.get(url,stream=True,headers=headers)
for chunk in music_html.iter_content(chunk_size=512):
if chunk:
f.write(chunk)
if os.path.getsize(file_path) > 10240: # 判断下载的文件是否大于 10kb
print("{}-{} 下载成功!".format(song_info["name"],song_info["singer"]))
return 0
else:
os.remove(file_path)
print("{}-{} 下载失败~!".format(song_info["name"],song_info["singer"]))
return 1
except:
print("{}-{} 下载失败".format(song_info["name"],song_info["singer"]))
return 1
def main():
song_info = searchMusic()
# print("歌曲信息如下:",song_info)
getMusic(song_info=song_info)
if __name__ == "__main__":
while 1:
main()
if_next = input("是否继续下载?是则输入y或Y,否则输入任意数结束下载: ")
if if_next != 'y' and if_next != 'Y':
print("下载的歌曲自动保存在代码所在目录下的Music文件夹~")
print("程序结束,欢迎下次继续使用~")
break;
运行程序后,程序会在代码存放的文件夹创建 Music 文件夹,然后下载音乐到该文件夹~
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。