鱼C论坛

 找回密码
 立即注册
查看: 1899|回复: 1

[技术交流] python免费下载音乐

[复制链接]
发表于 2020-3-26 17:19:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python免费下载音乐
第三方库:requests,json
  1. import requests
  2. import json

  3. headers = {
  4.     'Host': 'c.y.qq.com',
  5.     'Referer': 'http://c.y.qq.com/',
  6.     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 '
  7.                   'Safari/537.36 '
  8. }


  9. def douqq_post(mid):
  10.     """
  11.     返回歌曲下载url
  12.     :param mid:歌曲mid
  13.     :return: 字典
  14.     """
  15.     post_url = 'http://www.douqq.com/qqmusic/qqapi.php'
  16.     data = {'mid': mid}
  17.     res = requests.post(post_url, data=data)
  18.     get_json = json.loads(res.text)
  19.     return eval(get_json)


  20. def download_file(src, file_path):
  21.     """
  22.     歌曲下载
  23.     :param src: 下载链接
  24.     :param file_path: 存储路径
  25.     :return: 文件路径
  26.     """
  27.     r = requests.get(src, stream=True)
  28.     f = open(file_path, "wb")
  29.     for chunk in r.iter_content(chunk_size=512):
  30.         if chunk:
  31.             f.write(chunk)
  32.     return file_path


  33. def choice_download(dic):
  34.     print('1. m4a视频')
  35.     print('2. mp3普通品质')
  36.     print('3. mp3高品质')
  37.     print('4. ape高品无损')
  38.     print('5. flac无损音频')
  39.     select = int(input("Please input your choice:"))
  40.     src = ''
  41.     postfix = ''
  42.     if select == 1:
  43.         src = dic['m4a']
  44.         postfix = '.m4a'
  45.     if select == 2:
  46.         src = dic['mp3_l']
  47.         postfix = '.mp3'
  48.     if select == 3:
  49.         src = dic['mp3_h']
  50.         postfix = '.mp3'
  51.     if select == 4:
  52.         src = dic['ape']
  53.         postfix = '.ape'
  54.     if select == 5:
  55.         src = dic['flac']
  56.         postfix = '.flac'
  57.     return postfix, src.replace('\/\/', '//').replace('\/', '/')


  58. def find_song(word):
  59.     """
  60.     查找歌曲
  61.     :param word: 歌曲名
  62.     :return: 返回歌曲mid
  63.     """
  64.     get_url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n' \
  65.               '=20&w=' + word
  66.     res1 = requests.get(get_url, headers=headers)
  67.     get_json = json.loads(res1.text.strip('callback()[]'))
  68.     jsons = get_json['data']['song']['list']
  69.     songmid = []
  70.     media_mid = []
  71.     song_singer = []
  72.     i = 1
  73.     for song in jsons:
  74.         # print(i, ':' + song['songname'], '---', song['singer'][0]['name'], song['songmid'], song['media_mid'])
  75.         print(i, ':' + song['songname'], '---', song['singer'][0]['name'])
  76.         songmid.append(song['songmid'])
  77.         media_mid.append(song['media_mid'])
  78.         song_singer.append(song['singer'][0]['name'])
  79.         i = i + 1
  80.     select = int(input("Please input your choice:")) - 1
  81.     return songmid[select], song_singer[select]


  82. if __name__ == '__main__':
  83.     # songname = '叹云兮'
  84.     songname = input("Please input the music name:")
  85.     song_mid, singer = find_song(songname)
  86.     dic = douqq_post(song_mid)
  87.     # {
  88.     # "mid":"004FjJo32TISsY",
  89.     # "m4a":"http:\/\/dl.stream.qqmusic.qq.com\/C400004FjJo32TISsY.m4a?guid=2095717240&vkey=0B599CA74745F8A27A33A1FED2C7F6925FFFE8ED040569FB3540EB011FE9C5A3D7F36EAE4BDBD450F25076A23EBAF95A5ECB54B22C5E8F10&uin=0&fromtag=38",
  90.     # "mp3_l":"http:\/\/dl.stream.qqmusic.qq.com\/M500004FjJo32TISsY.mp3?guid=2095717240&vkey=0B599CA74745F8A27A33A1FED2C7F6925FFFE8ED040569FB3540EB011FE9C5A3D7F36EAE4BDBD450F25076A23EBAF95A5ECB54B22C5E8F10&uin=0&fromtag=53",
  91.     # "mp3_h":"http:\/\/dl.stream.qqmusic.qq.com\/M800004FjJo32TISsY.mp3?guid=2095717240&vkey=0B599CA74745F8A27A33A1FED2C7F6925FFFE8ED040569FB3540EB011FE9C5A3D7F36EAE4BDBD450F25076A23EBAF95A5ECB54B22C5E8F10&uin=0&fromtag=53",
  92.     # "ape":"http:\/\/dl.stream.qqmusic.qq.com\/A000004FjJo32TISsY.ape?guid=2095717240&vkey=0B599CA74745F8A27A33A1FED2C7F6925FFFE8ED040569FB3540EB011FE9C5A3D7F36EAE4BDBD450F25076A23EBAF95A5ECB54B22C5E8F10&uin=0&fromtag=53",
  93.     # "flac":"http:\/\/dl.stream.qqmusic.qq.com\/F000004FjJo32TISsY.flac?guid=2095717240&vkey=0B599CA74745F8A27A33A1FED2C7F6925FFFE8ED040569FB3540EB011FE9C5A3D7F36EAE4BDBD450F25076A23EBAF95A5ECB54B22C5E8F10&uin=0&fromtag=53",
  94.     # "pic":"https:\/\/y.gtimg.cn\/music\/photo_new\/T002R300x300M000003NZyTh4eMMsp.jpg?max_age=2592000"
  95.     # }
  96.     # print('mid:'+dic['mid'])
  97.     postfix, url = choice_download(dic)
  98.     save_path = "E:\\Music\"
  99.     download_file(url, save_path + songname + ' - ' + singer + postfix)
  100.     print('Download Successful')
复制代码
下载的时候尽量用视频格式下载

评分

参与人数 1荣誉 +2 收起 理由
WangJS + 2 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-26 17:20:37 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-11 16:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表