Python爬取高品质QQ音乐(2)
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、目前没解决的问题
- 就是用代码下载下来的qq音乐文件,在QQ音乐软件里面识别有问题,只能识别出来歌曲的名字。
- 通过url在Chrome下载的音乐都可以识别出来。
- 本来想添加批量下载喜欢的歌曲,目前只有分析获取的数据来获取喜欢的歌曲,还是要在登陆的前提,感觉没有意义(其实是做不出来)。
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)相关推荐
- python爬取网易云音乐热评_python爬取网易云音乐评论
本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...
- python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜 python爬取网易云音乐热歌榜实例代码...
想了解python爬取网易云音乐热歌榜实例代码的相关内容吗,FXL在本文为您仔细讲解python爬取网易云音乐热歌榜的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:python,网易热歌榜 ...
- python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜实例代码
首先找到要下载的歌曲排行榜的链接,这里用的是: https://music.163.com/discover/toplist?id=3778678 然后更改你要保存的目录,目录要先建立好文件夹,例如我 ...
- Python爬取网易云音乐热歌榜(爬虫)
Python爬取网易云音乐热歌榜歌曲,并下载到本地 找到要下载歌曲排行榜的链接,这里用的是: https://music.163.com/discover/toplist?id=3778678 然后更 ...
- python爬取网易云音乐生成王力宏歌曲词云
python爬取网易云音乐生成王力宏歌曲词云 # -*- coding:utf-8 -*- # 网易云音乐,通过歌手id生成词云 import requests import sys,re,os fr ...
- Python爬取酷狗音乐歌手信息
前面我们说过用python爬取网易云音乐的歌手信息,Python爬取网易云音乐歌手信息 今天我们来爬取一下酷狗音乐的歌手信息(歌手id和歌手名),如果环境没有安装好,可以参照前面爬网易云环境配置作为参 ...
- python爬取网易云音乐排行榜数据
python爬取网易云音乐排行榜歌曲及评论 网易云音乐排行榜歌曲及评论爬取 主要注意问题:selenium 模拟登录.iframe标签定位.页面元素提取. 在利用selenium定位元素并取值的过程中 ...
- [爬虫]Python爬取网易云音乐搜索并下载歌曲!
Python爬取网易云音乐搜索并下载歌曲! 文章目录 Python爬取网易云音乐搜索并下载歌曲! 1.准备工作 2."实地"观察 3.开始码代码! 4.搜索并下载 结束语 1.准备 ...
- python爬取酷狗音乐排行榜
本文为大家分享了python爬取酷狗音乐排行榜的具体代码,供大家参考,具体内容如下 转载于:https://www.cnblogs.com/Pythonmiss/p/10799941.html
最新文章
- codeforces626F
- ArcCore重构-Platform_Types.h实现辨析
- 数据挖掘实战(一):Kaggle竞赛经典案例剖析
- Matlab生成m序列
- Spring过滤器组件自动扫描
- Hibernate常见问题集锦
- 结构数据类型 struce c# 1613533319
- Java入门教程[9天快速入门JAVA]
- 移动端真机调试的两种方法
- 使用mybaits遇见有大写的sql语句错误的bug分析
- IE11浏览器清除cookie
- 统信系统安装京瓷打印机驱动步骤 针对京瓷系列复合机的UOS操作系统用户使用说明
- CentOS 7 部署开源sip信令服务器 —— 筑梦之路
- macOS 终端打开提示:zsh compinit: insecure directories
- 2020考研计算机(408)考试大纲
- 合成大西瓜自定义图片及部署
- 推荐阅读:《我在赶集网的两个月(完整版)》
- Handle机制详解
- MCU单片机面试题(1)
- html怎么设置黄色背景,怎么添加黄色底纹
热门文章
- 搭建简单的http代理服务器
- c语言编译器mingw——常用编译命令
- dos命令行连接oracle数据库
- Detection of Rail Surface Defects Based on CNN Image Recognition and Classification-论文阅读笔记
- 输电线路无人机配电网巡检图像数据集(80G大小数据,几w张图像,无标签)
- Python re模块用法详解
- SurfaceFlinger系列<一>
- Android修行手册-Button实现点击音效有多简单?
- 第六章Android绘图机制与处理技巧(Android群英传)
- 教你用一个Json做一个App,移动应用开发框架