帮你踩坑系列:酷我音乐的歌词获取/下载,示例代码用 python
本人在下面代码中踩过的坑主要是:
bytesArr_lric = resp.content # 直接 bytesArray , 转为text再解压缩会报错。
# str_lric = resp.text #得到歌词密文
上面二句 有一句 是将服务器返回的内容,转为文本,再将需要解压缩的部分 split 出来,再调用 zlib.decompress(btsLricContent) #解压缩, 结果解压缩报错。
原因是直接转为文本时,原压缩内容已经改变,解压缩模块报压缩文件模式错误,无法解压缩。
上面二句代码中的另一句就是正确的, bytesArr_lric = resp.content 直接用服务器返回的歌词内容,格式 bytes 数组,经 split 分割后 将 "\r\n\r\n"之后的压缩内容用于解压缩,zlib.decompress()就不再报错了。
下面是我用 python 写的代码的关键部分:
import requests
from lxml.html import etree #pip install lxml
import zlib
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}
def getLric_kuwo(music_mid): #下载 kuwo 歌词 ,music_mid 是kuwo 音乐的 rid 或 mid 是数字的字符串
# 歌词 kuwo krc api
url1 = 'https://player.kuwo.cn/webmusic/st/getNewMuiseByRid?rid=MUSIC_{}'.format(music_mid)
resp = requests.get(url1,headers=headers) #取得歌词 ID
if resp.status_code < 200 or resp.status_code >= 300: #处理服务器返回的异
print(resp.reason + ", get lyric_id failed!\n")
return ""
tree = etree.HTML(resp.text)
musiclyric_id = tree.xpath("//lyric/text()") #取歌词_ID, 之后可以根据 歌词_ID 取得加密后的歌词 krc格式
url2 = 'http://newlyric.kuwo.cn/newlyric.lrc?{}'.format(musiclyric_id[0])
resp = requests.get(url2, stream=True, headers=headers) #取歌词密文。 kuwo 歌词被加密,需要解密!
if resp.status_code < 200 or resp.status_code >= 300: #处理服务器返回的异
print( resp.reason + ', get lyric by lyric_id ' + musiclyric_id + ' failed!\n')
bytesArr_lric = resp.content # 直接 bytesArray , 转为text再解压缩会报错。
# str_lric = resp.text #得到歌词密文
lric = ""
lric = decode_kuwoLyric(bytesArr_lric) #kuwo 歌词解压缩
return lric
def decode_kuwoLyric(bytes_lyric): #kuwo 歌词解压缩
lric=""
btsLricContent = bytes_lyric.split(b'\r\n\r\n')[-1] #对 bytes 数组进行 split
# print(btsLricContent)
# saveBinDataToFile(str(46337337) + ".gz", btsLricContent) #保存到文件
decompre_lric = zlib.decompress(btsLricContent) #解压缩
lric = str(decompre_lric, encoding="gbk") #?='utf-8'
return lric
def saveBinDataToFile(savepath, binaryData): #将 bytes 保存为文件
saveOK = False
try:
f = open(savepath, 'wb')
f.write(binaryData) # 写入文件, binaryData 必为 bytes 格式, 否则报错
f.close()
saveOK = True
except:
saveOK = False
return saveOK
music_rid='79479'
filename_lyrc = '79479.lrc'
strlyric = getLric_kuwo( music_rid) #取得歌词 解密的 krc 格式,可转 lrc 格式
ret = saveBinDataToFile(filename_lyrc, str.encode(strlyric))
if ret== True:
print("\n Lyric download OK!")
参考资料:
酷我音乐API_水也的博客-CSDN博客_酷我音乐api
帮你踩坑系列:酷我音乐的歌词获取/下载,示例代码用 python相关推荐
- 微信开发踩坑系列一之Native支付
微信开发踩坑系列一之Native支付 1.前言 1.1.文章说明 1.2.微信支付简介 1.3.项目技术栈 2.Native支付开发 2.1.官方描述 2.2.两种模式介绍 2.3.开发前准备工作 2 ...
- python导入类有红线_python踩坑系列之导入包时下划红线及报错“No module named”问题...
python踩坑系列之导入包时下划红线及报错"No module named"问题 使用pycharm编写Python时,自己写了一个包(commontool),在同级另一个路径下 ...
- python代码下出现红线_python踩坑系列之导入包时下划红线及报错“No module named”问题...
python踩坑系列之导入包时下划红线及报错"No module named"问题 使用pycharm编写Python时,自己写了一个包(commontool),在同级另一个路径下 ...
- openlayers6 踩坑系列(三)绘制和编辑(矩形,圆,多边形,点,线)
重要:博客内使用地图全替换为WMap,想使用的请参考我这篇博客(WMap) 最近在做矢量图形这一块,发现圆形和多边形,都可以使用openlayers自带的Modify类进行编辑,然后随意放大缩小旋转, ...
- 【踩坑系列】 SpringBoot ,SpringSecurity,activiti 项目无法正常跳转到登录界面
[踩坑系列] SpringBoot ,SpringSecurity,activiti 项目无法正常跳转到登录界面 前言 一直强制跳转到springSecurity 的默认的登录界面,无法正常跳转到自己 ...
- 【踩坑系列】mysql 修改root密码失败
[踩坑系列] mysql 修改root密码失败 问题原因 mysql 修改root密码失败 ,主要是因为root的host不是localhost,是%的问题. 修改密码的步骤 -- 切换到 mysql ...
- Oracle Clob类型踩坑系列
Oracle Clob类型踩坑系列 1]存储过程中向Clob中插入值 插入32767字节长度数据.无报错 Declarev_Clob Clob := '[32767长度字节数据]'; BeginIns ...
- 【踩坑系列】uniapp之h5 跨域的问题
文章目录 [踩坑系列]uniapp之h5 跨域的问题 前言 什么是跨域 如何解决 参考文章 [踩坑系列]uniapp之h5 跨域的问题 前言 在浏览器上调试移动端的界面,出现 不允许出现多个 'Acc ...
- android7.1.1开发过程中出现部分音乐播放器(酷狗,QQ音乐,酷我音乐)歌词不能长久显示在桌面
android7.1.1开发过程中出现部分音乐播放器(酷狗,QQ音乐,酷我音乐)歌词不能长久显示在桌面 处理:二号三方apk沟通,三方apk在7.1.1上做相应的适配, 这个和android7.1.1 ...
- java数字转大写 其他报异常_【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常...
python科学计算数据应用(第2版) 156.4元 (需用券) 去购买 > 1. 踩坑经历 上周,一个用户反馈他创建的某个销售单无法打开,但其余销售单都可以正常打开,当时查看了生产环境的ERR ...
最新文章
- STM32H7的Cache和MPU
- .net里鼠标选中的text数据怎么获取_怎么利用Excel设置当天生日提醒功能
- python解包操作_Python编程使用*解包和itertools.product()求笛卡尔积的方法
- SSY and JLBD
- JavaScript --- 跨浏览器的事件对象
- html5实现3d翻页效果,利用css3 3d transform制作超逼真翻书效果
- 深度优先搜索之踩方格问题
- 二进制模2除法(CRC校验)
- 服务器显示器超分辨率,不花钱就能让显示器分辨率翻番?不试你就亏了!
- 裸辞1天 vs 裸辞10天 vs 裸辞一个月
- 实验室设计规范与标准
- lofter 爬虫_Python网络爬虫1 - 爬取网易LOFTER图片
- 带你认识六种设计原则(开闭原则、里氏代换原则、依赖倒转原则....)
- nrm安装成功后但是不能使用
- 44 | 答疑(三)
- SLAM--VICP(Velocity Updating Iterative Closest Point Algorithm)学习笔记
- 我的世界网易怎么调成java,网易版我的世界如何将单机地图改为联机地图
- 学习固不可少 回顾也别有风味
- sentinel监控界面无显示
- IOS IAP APP内支付 Java服务端代码