Python爬虫-QQ音乐下载

作者: 丨像我这样的人丨 | 来源:发表于2018-08-19 21:56 被阅读23次
    代码效果

    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源码在这里

    最后就是愉快的 哪首想听 搜哪首 下哪首

    相关文章

      网友评论

        本文标题:Python爬虫-QQ音乐下载

        本文链接:https://www.haomeiwen.com/subject/eplhiftx.html