QQ音乐爬虫——sign参数逆向(补环境)
今天给大家分享一下QQ音乐sign参数的逆向。QQ音乐的sign是由webpack打包生成的。大致上就是把所有的函数封装为一个模块,然后通过加载器导出函数。各位如有什么不懂可以百度喔(主要是我也不太懂),这里就不做过多的解释了。
长话短说,切入正题。
进入一首歌播放页,框框里面的内容加上https://dl.stream.qqmusic.qq.com就是音乐的下载地址。
sign就是加密参数,songmid在搜索页可以找到。接下来就是找到sign是怎么生成的。
依然,使用我们的全局搜索大法。
找到sign的位置了,打上断点进行调试分析。sign是=i的,而i又 = "GET" === t.type.toUpperCase() ? o(t.data.data) : o(t.data),因为 "GET" === t.type.toUpperCase()在控制台打印出来的结果是false,由js的语法可知,i=o(t.data),也就是冒号后面的那个。t.data是传入的参数,经过o函数就变为了加密内容。而o = n(350).default,因此现在要解决o = n(350).default。
这里的o = n(350)就是webpack的形式。n是函数加载器,350是调用的函数。进入o函数,也就是webpack内部。如图:c就是加载器的名字。
这就是函数加载器,几乎所有webpack的加载器都这样。把这一页内容全部复制下来,放到我们的Python编辑器中。然后用对象的形式引出我们的函数,像这样:350是键,后面的函数是值,也就是。
这个n(350)里面又调用了n(110),如图,所以把n(110)函数也复制下来。
要在我们本地调用350和110,就需要我们在自执行函数的前面声明一个全局变量,这里我声明的是xxx。然后令全局变量等于我们的加载器。xxx=c。
。
ok,到这里就快接近成功了,接下来就是通过xxx来调用我们的函数350了。如下:
顺利拿到了结果:。
但是写爬虫代码却拿不到数据,那多半是加密参数有问题。
把代码放浏览器看看。
,果然不一样,接下来就是在node中补齐网站检测的环境。
这里挂几个常见的代理看看
结果:
接下来把缺的补上去就行了。
再次运行,
和浏览器运行结果一样,over!!。
通过Python来执行js代码,最后拿到音乐播放地址。效果如下:
值得注意的是只对非付费音乐有用,付费音乐是拿不到url的,毕竟听都不让听。还是那句话,只有你有会员就能下载,会员过了也能听。
今天的分享到这里就结束了,如果对大家有帮助那就太好了,拜拜啦!!!