仅供个人学习研究使用
import requests
class QQMiusc:
def __init__(self):
# 获取歌曲列表MID参数
self.song_id_url = 'https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?'
self.song_id_headers = {
'origin': 'https://y.qq.com',
'referer': 'https://y.qq.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
}
self.song_id_params = {
'type': '1',
'json': '1',
'utf8': '1',
'onlysong': '0',
'new_format': '1',
'disstid': '1855128183',
'g_tk_new_20200303': '704222412',
'g_tk': 'xxxxxx',
'loginUin': 'xxxxx', # uin参数此处为个人登录信息
'hostUin': '0',
'format': 'json',
'inCharset': 'utf8',
'outCharset': 'utf - 8',
'notice': '0',
'platform': 'yqq.json',
'needNewCode': '0',
}
# 获取歌曲下载链接
self.song_url = 'https://u.y.qq.com/cgi-bin/musicu.fcg'
self.song_url_headers = {
'origin': 'https://y.qq.com',
'referer': 'https://y.qq.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
}
# 下载歌曲参数
self.download_headers = {
'referer': 'https://y.qq.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
}
def get_song_id(self):
response = requests.get(self.song_id_url, headers=self.song_id_headers,
params=self.song_id_params)
song_list = response.json()['cdlist'][0]['songlist']
result =[]
for each in song_list:
name = each['name']
mid = each['mid']
result.append((name, mid))
return result
def get_song_url(self, song_id_list):
result = []
for song in song_id_list:
song_url_params = {
'-': 'getplaysongvkey9184990317001633',
'g_tk': '704222412',
'sign': 'zzaf7jfoyaca4jfrgz121abdc2d7c85c413eb2447570a56eb0',
'loginUin': 'xxxxxxx',
'hostUin': '0',
'format': 'json',
'inCharset': 'utf8',
'outCharset': 'utf - 8',
'notice': '0',
'platform': 'yqq.json',
'needNewCode': '0',
'data': '{"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":\
{"guid":"5667010700","calltype":0,"userip":""}},"req_0":\
{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":\
{"guid":"5667010700","songmid":["' + song[1] + '"],\
"songtype":[0],"uin":"xxxxxxx","loginflag":1,"platform":"20"}},\
"comm":{"uin":xxxxxxx,"format":"json","ct":24,"cv":0}}'
}
response = requests.get(self.song_url, headers=self.song_url_headers, params=song_url_params)
result.append((song[0],response.json()["req_0"]["data"]["midurlinfo"][0]["purl"]))
return result
def download(self,song_urls):
try:
base_url = 'https://isure.stream.qqmusic.qq.com/'
for song in song_urls:
print(f'正在爬{song[0]}')
song_content = requests.get(base_url + song[1], headers=self.download_headers).content
with open('./images/' + song[0] + '.m4a', 'wb') as f:
f.write(song_content)
except Exception as e:
print(e)
def run(self):
song_id_list = self.get_song_id()
song_urls = self.get_song_url(song_id_list)
self.download(song_urls)
if __name__ == '__main__':
QQMiusc().run()