python爬O音乐,有缺陷,仅供参考,直接源码

import requests
import json


class qm:
def __init__(self):
self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
self.sl = []
self.musicList = []

# 获取页面
def getPage(self, url, headers):
res = requests.get(url,headers=headers)
res.encoding = 'utf-8'
return res

# 获取音乐songmid
def getSongmid(self):
name = input('请输入歌名或歌手:')
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?p=1&n=10&w={}'.format(name)
# 搜索音乐
res = self.getPage(url,headers=self.headers)
html = res.text
html = html[9:]
html = html[:-1]
# 获取songmid
js = json.loads(html)
songlist = js['data']['song']['list']
for song in songlist:
# print(song)
songmid = song['songmid']
name = song['songname']
self.sl.append((name,songmid))
# print('获取成功songmid')


# 获取音乐资源,guid是登录后才能获取,nin也是
def getVkey(self):
# guid = input('请输入guid:')
# uin = input('请输入uin:')
for s in self.sl:
# print('开始获取资源')
# 获取vkey,purl
name = s[0]
songmid = s[1]
keyUrl = 'https://u.y.qq.com/cgi-bin/musicu.fcg?&data={"req":{"param":{"guid":" 1212112"}},' \
'"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"1212112",' \
'"songmid":["%s"],"uin":"121331"}},"comm":{"uin":"121331"}}'%(songmid)
res = self.getPage(keyUrl,headers=self.headers)
html = res.text
keyjs = json.loads(html)
purl = keyjs['req_0']['data']['midurlinfo'][0]['purl']
# 拼凑资源url
url = 'http://dl.stream.qqmusic.qq.com/' + purl
self.musicList.append((name, url))


# 下载音乐
def downloadMusic(self):
# print(self.musicList)
for i in range(len(self.musicList)):
print(i, self.musicList[i])

n = int(input('请输入对应序列:'))
if n <= len(self.musicList):
print("正在下载....")
url = self.musicList[n][1]
res = self.getPage(url, headers=self.headers)
music = res.content
name = self.musicList[n][0] + '.mp3'
with open(name, 'wb') as f:
f.write(music)
print('下载完成。')

 

qq = qm()
qq.getSongmid()
qq.getVkey()
qq.downloadMusic()

posted @ 2021-03-30 18:29  tevien  阅读(176)  评论(0)    收藏  举报