Python爬取高品质QQ音乐(2)
Python爬取高品质QQ音乐(2)
1、获取歌曲的名字
使用pyquery来获取title。
def get_name(self): # 获取歌曲的名字
response = requests.get(url=self.music_url).text
doc = pq(response)
self.music_name = doc(title).text().split(-)[0] # 歌曲的名字
2、获取加密的vkey
具体的步骤第一篇久介绍了,这里久直接贴上代码了。
3、获取不同音乐品质的URL
music_type = {
C400: m4a,
M500: mp3,
M800: mpe,
A000: ape,
F000: flac
} # m4a, mp3普通, mp3高, ape, flac
上面的参数是通过分析比较下载地址,来获取的不同品质的参数。接下来就是将上面的参数拼接到url。
4、通过协程来判断url的有效性
第一次使用协程,有可能理解的不正确,但是当前可以正常使用,明天来写一篇协程的知识点吧。
def get_url(self, music_urls): # 用协程判断是否存在不同音乐品质的url
result = []
async def get(url):
session = aiohttp.ClientSession()
response = await session.get(url)
status_code = response.status
# session.close()
return status_code
async def request(url):
response = await get(url)
if response == 200:
result.append(url)
tasks = [asyncio.ensure_future(request(url)) for url in music_urls]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
self.music_download_url = result[-1] # 默认下载最高品质
5、音乐的下载
def download_music(self): # 音乐的下载
response = requests.get(url=self.music_download_url,stream=True)
with open(self.music_name+.mp3, wb) as f:
for check in response.iter_content(1024):
f.write(check)
6、目前没解决的问题
- 通过url在Chrome下载的音乐都可以识别出来。
- 本来想添加批量下载喜欢的歌曲,目前只有分析获取的数据来获取喜欢的歌曲,还是要在登陆的前提,感觉没有意义(其实是做不出来)。
