Python爬取高品质QQ音乐(2)

另一篇文章已经介绍了付费音乐的下载过程:传送门
这一篇主要是说一下爬取不同品质的QQ音乐(默认最高品质)。
知识点
1. 通过分析比较URL,判断不同品质音乐附带的参数。
2. 通过使用协程来判断url是否存在。
3. 使用pyquery来抓取歌曲的名字。

1、获取歌曲的名字

使用pyquery来获取title。

def get_name(self):  # 获取歌曲的名字response = requests.get(url=self.music_url).textdoc = pq(response)self.music_name = doc('title').text().split('-')[0]     # 歌曲的名字

2、获取加密的vkey

具体的步骤第一篇久介绍了,这里久直接贴上代码了。

    def get_params(self):   # 获取加密的vkeyself.params = self.music_url[self.music_url.rindex('/') + 1:self.music_url.rindex('.')]  # 获取音乐的IDparams_url = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&songmid=' + \self.params + '&filename=C400' + self.params + '.m4a&guid=9082027038'  # 加密参数的urlresponse = requests.get(params_url, verify=False)  # 访问加密的网址response = json.loads(response.text)self.vkey = response['data']['items'][0]['vkey']  # 加密的参数

3、获取不同音乐品质的URL

music_type = {'C400': 'm4a','M500': 'mp3','M800': 'mpe','A000': 'ape','F000': 'flac'}  # m4a, mp3普通, mp3高, ape, flac

上面的参数是通过分析比较下载地址,来获取的不同品质的参数。接下来就是将上面的参数拼接到url。

    def get_quality(self):  # 获取不同品质的url# quality_id = input('请输入1-5(默认最高)')index_music_url = 'http://dl.stream.qqmusic.qq.com/{}' + self.params + \'.{}?vkey=' + self.vkey + '&guid=9082027038&uin=0&fromtag=53'music_type = {'C400': 'm4a','M500': 'mp3','M800': 'mpe','A000': 'ape','F000': 'flac'}  # m4a, mp3普通, mp3高, ape, flacmusic_urls = []  # 下载音乐的地址for k, v in music_type.items():music_url = index_music_url.format(k, v)music_urls.append(music_url)self.get_url(music_urls)

4、通过协程来判断url的有效性

第一次使用协程,有可能理解的不正确,但是当前可以正常使用,明天来写一篇协程的知识点吧。

    def get_url(self, music_urls):  # 用协程判断是否存在不同音乐品质的urlresult = []async def get(url):session = aiohttp.ClientSession()response = await session.get(url)status_code = response.status# session.close()return status_codeasync 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. 就是用代码下载下来的qq音乐文件,在QQ音乐软件里面识别有问题,只能识别出来歌曲的名字。
  2. 通过url在Chrome下载的音乐都可以识别出来。
  3. 本来想添加批量下载喜欢的歌曲,目前只有分析获取的数据来获取喜欢的歌曲,还是要在登陆的前提,感觉没有意义(其实是做不出来)。

7、贴上总代码

import requests
import json
import asyncio
import aiohttp
from pyquery import PyQuery as pqclass YinYue:def __init__(self, url):self.music_url = url  # 音乐的urlself.music_id = None  # 音乐的IDself.music_download_url = None  # 最终音乐的下载地址self.music_name = None  #音乐的名字self.vkey = None  # 加密的参数self.params = None  # 提交的参数def get_name(self):  # 获取歌曲的名字response = requests.get(url=self.music_url).textdoc = pq(response)self.music_name = doc('title').text().split('-')[0]     # 歌曲的名字def get_params(self):   # 获取加密的vkeyself.params = self.music_url[self.music_url.rindex('/') + 1:self.music_url.rindex('.')]  # 获取音乐的IDparams_url = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&songmid=' + \self.params + '&filename=C400' + self.params + '.m4a&guid=9082027038'  # 加密参数的urlresponse = requests.get(params_url, verify=False)  # 访问加密的网址response = json.loads(response.text)self.vkey = response['data']['items'][0]['vkey']  # 加密的参数def get_quality(self):  # 获取不同品质的url# quality_id = input('请输入1-5(默认最高)')index_music_url = 'http://dl.stream.qqmusic.qq.com/{}' + self.params + \'.{}?vkey=' + self.vkey + '&guid=9082027038&uin=0&fromtag=53'music_type = {'C400': 'm4a','M500': 'mp3','M800': 'mpe','A000': 'ape','F000': 'flac'}  # m4a, mp3普通, mp3高, ape, flacmusic_urls = []  # 下载音乐的地址for k, v in music_type.items():music_url = index_music_url.format(k, v)music_urls.append(music_url)self.get_url(music_urls)def get_url(self, music_urls):  # 用协程判断是否存在不同音乐品质的urlresult = []async def get(url):session = aiohttp.ClientSession()response = await session.get(url)status_code = response.status# session.close()return status_codeasync 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]    # 默认下载最高品质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)yinyue = YinYue('https://y.qq.com/n/yqq/song/000KHhaJ4S0hOL.html')
yinyue.get_name()
yinyue.get_params()
yinyue.get_quality()
yinyue.download_music()

Python爬取高品质QQ音乐(2)相关推荐

  1. python爬取网易云音乐热评_python爬取网易云音乐评论

    本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...

  2. python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜 python爬取网易云音乐热歌榜实例代码...

    想了解python爬取网易云音乐热歌榜实例代码的相关内容吗,FXL在本文为您仔细讲解python爬取网易云音乐热歌榜的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:python,网易热歌榜 ...

  3. python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜实例代码

    首先找到要下载的歌曲排行榜的链接,这里用的是: https://music.163.com/discover/toplist?id=3778678 然后更改你要保存的目录,目录要先建立好文件夹,例如我 ...

  4. Python爬取网易云音乐热歌榜(爬虫)

    Python爬取网易云音乐热歌榜歌曲,并下载到本地 找到要下载歌曲排行榜的链接,这里用的是: https://music.163.com/discover/toplist?id=3778678 然后更 ...

  5. python爬取网易云音乐生成王力宏歌曲词云

    python爬取网易云音乐生成王力宏歌曲词云 # -*- coding:utf-8 -*- # 网易云音乐,通过歌手id生成词云 import requests import sys,re,os fr ...

  6. Python爬取酷狗音乐歌手信息

    前面我们说过用python爬取网易云音乐的歌手信息,Python爬取网易云音乐歌手信息 今天我们来爬取一下酷狗音乐的歌手信息(歌手id和歌手名),如果环境没有安装好,可以参照前面爬网易云环境配置作为参 ...

  7. python爬取网易云音乐排行榜数据

    python爬取网易云音乐排行榜歌曲及评论 网易云音乐排行榜歌曲及评论爬取 主要注意问题:selenium 模拟登录.iframe标签定位.页面元素提取. 在利用selenium定位元素并取值的过程中 ...

  8. [爬虫]Python爬取网易云音乐搜索并下载歌曲!

    Python爬取网易云音乐搜索并下载歌曲! 文章目录 Python爬取网易云音乐搜索并下载歌曲! 1.准备工作 2."实地"观察 3.开始码代码! 4.搜索并下载 结束语 1.准备 ...

  9. python爬取酷狗音乐排行榜

    本文为大家分享了python爬取酷狗音乐排行榜的具体代码,供大家参考,具体内容如下 转载于:https://www.cnblogs.com/Pythonmiss/p/10799941.html

最新文章

  1. codeforces626F
  2. ArcCore重构-Platform_Types.h实现辨析
  3. 数据挖掘实战(一):Kaggle竞赛经典案例剖析
  4. Matlab生成m序列
  5. Spring过滤器组件自动扫描
  6. Hibernate常见问题集锦
  7. 结构数据类型 struce c# 1613533319
  8. Java入门教程[9天快速入门JAVA]
  9. 移动端真机调试的两种方法
  10. 使用mybaits遇见有大写的sql语句错误的bug分析
  11. IE11浏览器清除cookie
  12. 统信系统安装京瓷打印机驱动步骤 针对京瓷系列复合机的UOS操作系统用户使用说明
  13. CentOS 7 部署开源sip信令服务器 —— 筑梦之路
  14. macOS 终端打开提示:zsh compinit: insecure directories
  15. 2020考研计算机(408)考试大纲
  16. 合成大西瓜自定义图片及部署
  17. 推荐阅读:《我在赶集网的两个月(完整版)》
  18. Handle机制详解
  19. MCU单片机面试题(1)
  20. html怎么设置黄色背景,怎么添加黄色底纹

热门文章

  1. 搭建简单的http代理服务器
  2. c语言编译器mingw——常用编译命令
  3. dos命令行连接oracle数据库
  4. Detection of Rail Surface Defects Based on CNN Image Recognition and Classification-论文阅读笔记
  5. 输电线路无人机配电网巡检图像数据集(80G大小数据,几w张图像,无标签)
  6. Python re模块用法详解
  7. SurfaceFlinger系列<一>
  8. Android修行手册-Button实现点击音效有多简单?
  9. 第六章Android绘图机制与处理技巧(Android群英传)
  10. 教你用一个Json做一个App,移动应用开发框架