Github源码在这里
代码的效果其实和上一篇网易云音乐的爬取是一模一样的
先搜索歌名或者歌手 找到想要下载的编号 输入编号下载即可
相比于网易云音乐 QQ音乐简直太渣了(专指加密)
第一点:QQ音乐都是get请求 没有post请求 不需要传入一些奇葩的参数 所以比较简单
第二点:QQ音乐下载过来是m4a格式 而网易云是MP4 (源文件就是这样) 只能说网易云更良心 m4a格式牺牲了音质 节省了空间 当然 我这样的木耳也听不出来啥区别 就是MP4常见一点
第三点:QQ音乐没有使用复杂的RSA、AES加密算法 下面是TFBOYS的《喜欢你》的文件地址 复制打开 就是音频文件 vkey就是加密的参数 看似这个串数字加密过 挺难获得 其实也是写在json里的 直接拿 贴上就行了
http://dl.stream.qqmusic.qq.com/C400001VySE80MYPrC.m4a?vkey=A43C8A65EED5DD07B6F5BF0DFDA934FBA0993658AF76F1C70693F679972D0B074E5FC3D91E480605D99AFE6D5CEEDD6BD3722C78E3505D72&guid=6800588318&uin=0&fromtag=66
PS:为什么拿这首歌举例子 纯粹是搜索里第一个 顺手就点了
下面详细讲解了QQ音乐的抓取
1.先进入搜索页搜索 仍以“喜欢你”为例
2.F12 F5 抓包 一下子就找到目标文件(其实花了好久 一个一个找下来的) 基本就是json文件 不是json 一般一看就不是
点击Headers 获得地址 这个地址非常非常的长 其实就是一些参数的拼接 然后就会没有用的参数是可以参数的 一个一个删掉测试下内容会不会发生变化 没用的就扔掉
删减后的url变成https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&p=1&n=20&w=%E5%96%9C%E6%AC%A2%E4%BD%A0
看吧 很多参数都没用 有用的就那么几个 其中说明下w参数 w就是搜索的内容 可作任意替换
尤其是中文搜索要做编码处理 quote()函数一下
3.这样就获得每首歌曲的详细信息
这里举例打印出歌名、作者、专辑、时长
这里有两个细节
一:作者(歌手)有多歌手的情况 这里首先遍历所有的歌手信息 获取后 用join()串在一起
二:数据中的歌曲时长是秒单位的 这里使用divmod函数转化后X分X秒
4.拿到搜索的列表 定位某一首歌的url 找之前提过的下载地址
搜索列表中随便点击一首歌 进入 点击播放 进入音乐播放器 F12 F5 抓包
找到了之前提到过的音频文件的url 发现关键参数vkey vkey是从哪里的来的
找啊找啊 终于找到了 就在这摆着 这也太太太放心了 网易云好歹加了好几层密
同样点击Headers 又是一非常非常非常长的url 删删删 删掉那些没有的参数
最后精简为
https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&cid=205361747&songmid=001VySE80MYPrC&filename=C400001VySE80MYPrC.m4a&guid=6800588318
同样的方法 拿好几首歌来测试下 观察哪些参数发生了变化
其实就只变换一个参数songmid ,filename参数值就是songmid前缀增加C400
构造通配表达式
https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&cid=205361747&songmid=%s&filename=C400%s.m4a&guid=6800588318' % ( media_mid, media_mid)
midia_mid从何而来 之前不是找过歌曲的详细信息 这里什么没有啊 果然在里面 获取即可
总结下 就是先获得media_mid 构造一个url 得到vkey 再使用vkey构造第二个url 即可获取音频文件的源地址了
PS:第二个url不要像之前操作一样 再删掉没用的参数 力求精简 这里实测遇到一个小坑
测试的时候 确实删掉了uin和fromtag这两参数 网址是能打开播放的 但是爬虫requests的时候 下载过来 音频已损坏 无法播放 怀疑自己 怀疑人生 最后参数不删除 放回去 终于下载的音频能播放
5.最后写个run函数 就可以哪首想听 搜哪首
PS:细节 如果歌曲已下架 返回的音频文件的vkey是NULL 所以要加一个判断 如果vkey是null的话 就不用构造url了 如果vkey是null不做判断的话 会继续构造下载url 而这个url里的vkey是null 下载过来 啥的没有
END
Github源码在这里
最后就是愉快的 哪首想听 搜哪首 下哪首