首页 编程教程正文

免费下载QQ音乐高品质、无损音质

piaodoo 编程教程 2020-02-22 22:14:24 1174 0 python教程

本文来源吾爱破解论坛

本帖最后由 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)

下载附件  保存到相册

2019-3-13 18:00 上传

运行环境: 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 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7886.html

搜索