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、目前没解决的问题

  1. 通过url在Chrome下载的音乐都可以识别出来。
  2. 本来想添加批量下载喜欢的歌曲,目前只有分析获取的数据来获取喜欢的歌曲,还是要在登陆的前提,感觉没有意义(其实是做不出来)。

7、贴上总代码

经验分享 程序员 微信小程序 职场和发展