Python下载qq音乐歌曲实例教程

news/2024/11/20 0:29:44/

1.目标
实现输入歌曲名下载歌曲的功能。
2.前期工作
进入qq音乐搜索页面检查,进入网络,刷新,找到该xhr文件,观察到搜索到的歌曲都在list中。进入第一个歌曲信息内部,发现了mid,我们之后要获取它mid=0014WVQT3nDVyz
进入播放页面,检查,看到了purl,也是要获得的。purl=C4000001xPPq0vaUFU.m4a?guid=6488443882&vkey=9500AB02A1928CBD8BAE5DEE9B7ADB5521EFA232A0E9B941F77BE86B41CAC6726ECE081E248DBEB573CAAD591577B6D1A2F6D24F4476CA8F&uin=0&fromtag=66
我们直接在播放页面找到最大的媒体文件,注意要播放后才会出来。进入它的网址。此时可以直接下载。3.观察网址
https://isure.stream.qqmusic.qq.com/C4000001xPPq0vaUFU.m4a?guid=6488443882&vkey=9500AB02A1928CBD8BAE5DEE9B7ADB5521EFA232A0E9B941F77BE86B41CAC6726ECE081E248DBEB573CAAD591577B6D1A2F6D24F4476CA8F&uin=0&fromtag=66
不难发现,最终资源的地址是 https://isure.stream.qqmusic.qq.com/加上purl的值。
所以我们的目标变成了获取purl的值。
purl的值就在该xhr文件中,获取该文件,需要获得其网址。网址是https://u.y.qq.com/cgi-bin/musics.fcg?-=getplaysongvkey0033131399886299207&g_tk=5381&sign=zzab5dqwy5ttl2c79ca80fa0e018633d46cf549245b83&loginUin=2893403981&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0&data=%7B%22req%22%3A%7B%22module%22%3A%22CDN.SrfCdnDispatchServer%22%2C%22method%22%3A%22GetCdnDispatch%22%2C%22param%22%3A%7B%22guid%22%3A%226488443882%22%2C%22calltype%22%3A0%2C%22userip%22%3A%22%22%7D%7D%2C%22req_0%22%3A%7B%22module%22%3A%22vkey.GetVkeyServer%22%2C%22method%22%3A%22CgiGetVkey%22%2C%22param%22%3A%7B%22guid%22%3A%226488443882%22%2C%22songmid%22%3A%5B%22001IOmP80alVEv%22%5D%2C%22songtype%22%3A%5B0%5D%2C%22uin%22%3A%222272463882%22%2C%22loginflag%22%3A1%2C%22platform%22%3A%2220%22%7D%7D%2C%22comm%22%3A%7B%22uin%22%3A2272463882%2C%22format%22%3A%22json%22%2C%22ct%22%3A24%2C%22cv%22%3A0%7D%7D
在这里通过对比后发现songmid的取值是可变的,它也就是标识符。这里是qq音乐进行了MD5加密,不用管,只需要知道它是获取purl的前提。
那么songmid的获取与其一样,要知道上一级的mid,就需要知道其文件的网址。
https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=70631360004412645&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=%E9%9D%9E%E9%B1%BC&g_tk_new_20200303=5381&g_tk=5381&loginUin=2272463882&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0
通过归纳可以知道n代表搜索到的歌曲显示数目,w是搜索的关键字,同样用了MD5加密。
4.思路
做好前期工作后,来梳理下思路:通过构造搜索网址传入关键字进行搜索,将要下载的歌曲的mid获取到,以mid构造播放的网址,从而获得purl,最后,构造资源链接进行下载。
话不多说,直接上代码:

#coding="utf-8"
import requests
import re 
import os
import json
import time as tclass QQmusic():"""下载qq音乐"""def __init__(self):"""初始化"""self.headers={'Accept-Encoding': 'gzip, deflate, sdch','Accept-Language': 'en-US,en;q=0.8','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Referer': 'http://www.baidu.com/','Connection': 'keep-alive',}self.names=[]self.order=' 'def search(self):"""搜索"""w=input("请输入歌曲名: ")url_0="https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=61460539676714578&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w={0}&g_tk_new_20200303=5381&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0".format(w)res_0=requests.get(url_0,headers=self.headers)#第一层,搜索页res_0.encoding=res_0.apparent_encodingres_0=res_0.json()#dictmusic_list = res_0["data"]["song"]["list"]print("共计"+str(len(music_list))+"结果: ")all_singers=[]a=0for music in music_list:singer=music["singer"][0]["title"]#歌手名name=str(a)+"  "+music["title"]#歌曲名all_singers.append(singer)self.names.append(name)a=a+1 infs=dict(zip(self.names, all_singers))infs=json.dumps(infs, ensure_ascii=False, indent=4, separators=(',', ':'))infs=infs.replace('"',' ')infs=infs.replace(':','——————')print(infs)self.order=input("请输入歌曲前的序号:")songmid=res_0['data']['song']['list'][int(self.order)]['mid']url_1="https://u.y.qq.com/cgi-bin/musicu.fcg?format=json&data=%7B%22req_0%22%3A%7B%22module%22%3A%22vkey.GetVkeyServer%22%2C%22method%22%3A%22CgiGetVkey%22%2C%22param%22%3A%7B%22guid%22%3A%22358840384%22%2C%22songmid%22%3A%5B%22{}%22%5D%2C%22songtype%22%3A%5B0%5D%2C%22uin%22%3A%221443481947%22%2C%22loginflag%22%3A1%2C%22platform%22%3A%2220%22%7D%7D%2C%22comm%22%3A%7B%22uin%22%3A%2218585073516%22%2C%22format%22%3A%22json%22%2C%22ct%22%3A24%2C%22cv%22%3A0%7D%7D".format(songmid)res_1=requests.get(url_1,headers=self.headers)res_1.encoding=res_1.apparent_encodingres_1=res_1.json()#dictpurl=res_1['req_0']['data']['midurlinfo'][0]['purl']url_2="https://isure.stream.qqmusic.qq.com/"+purlreturn url_2def download(self):"""下载"""res_2=requests.get(self.search(),headers=self.headers).contentfir=self.names[int(self.order)]tit=re.sub(r'\d+','',fir)now=os.getcwd()now=os.path.join(now,"qq音乐 ")if  not os.path.exists(now):os.mkdir(now)os.chdir(now)file_name=tit+'.m4a'with open(file_name,'wb') as f:f.write(res_2)one_file=QQmusic()
one_file.download()

http://www.ppmy.cn/news/528670.html

相关文章

QQ音乐sign解密以及排行榜完整歌曲数据

文章目录 前言一、sign解密二、修改js,修改传参,获取全量数据 总结 前言 最近看到有很多小伙伴在搞某Q音乐,我也特意来水一篇,因为pc端的限制排行榜只能出现20首歌曲,但是我发现其实简单的修改一个参数就能显示跟app端…

QQ音乐API

** QQ音乐API ** 效果图: URL: 通过这条接口查找到这10条歌曲每一条的Songmid https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr1&cr1&flag_qc0&p1&n10&w邓紫棋; 这条链接获取到QQ音乐当前使用的地址(QQ音乐不定期换地…

QQ音乐的歌曲真实地址解析

以QQ音乐的单曲页面URL https://y.qq.com/n/yqq/song/000YU69H3N55rZ.html 为例,说明如何解析得到真实的音频地址。 打开该页面地址,是这样的: 点击页面中的播放按钮,会在新页面的播放器里播放该音乐。在新页面中打开开发者工具的…

Python爬虫实战,QQ音乐爬取全部歌曲

前景介绍 最近小伙伴们听歌的兴趣大涨,网抑云综合症已经遍布各地。 咱们再来抬高一波QQ音乐的热度吧。很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人&…

qq音乐api android,QQ音乐

## 示例 **QQ音乐基本信息** * 请求URL:http://api.lmwljz.com/song * 请求方式:POST **请求参数** > 例:infoqq,003qv80Y1EiADB&keyaccess_token |参数名称|类型|说明| | --- | --- | --- | | info |string | qq,歌曲ID (参数以半角度…

QQ音乐 最新歌曲源 API(稳定)

//2019.04.19 这次我真的找到可用的api了, 兄弟们,http://ustbhuangyi.com/music/#/singer,可以先去这个地址研究一哈,大佬用vue写的 // 11.29 更新 http://isure.stream.qqmusic.qq.com/C400003tAqVn0Fj6BS.m4a?guid42080809…

【Python爬虫实战】使用Selenium爬取QQ音乐歌曲及评论信息

本文对使用到的技术仅做简单的介绍,若想了解更多,请前往相应的官网网站进行学习。 本文适合对爬虫相关知识接触不多的新手,主要是普及Selenium如何做爬虫,大佬请跳过。 1.Selenium简单介绍 1.简介 Selenium是一个用于测试网站的自…

爬虫实战 -- QQ音乐爬取全部歌曲

前景介绍 最近小伙伴们听歌的兴趣大涨,网抑云综合症已经遍布各地。 咱们再来抬高一波QQ音乐的热度吧。 土豪充绿钻 和 刷永久绿钻的除外(me🤣) 爬它! 目标:歌手列表 任务:将A到Z的歌手以及全部页数的歌存到本地和数据…