环球热头条丨爬虫逆向学习-下载网易云音乐

2023-05-07 16:07:49 [来源:哔哩哔哩]

本文讲述爬取下载网易云音乐,带领大家学习爬虫逆向。

一.逆向分析

歌曲《有何不可》地址:https://music.163.com/#/song?id=167876 可以发现歌曲的音频链接不在页面源代码中,为动态数据,我们点击“播放”,利用抓包工具可以找到音频链接(可以复制音频链接浏览器搜索验证)。

通过“搜索”找到音频链接如何获得,可以发现https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=链接的请求内容中含有歌曲音频链接。


(资料图片)

可以发现请求https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=链接的参数被加密了,接下来的分析和下载网易云评论很相似。

点击这一链接“发起程序”的最上面的地址

格式化查看,打上断点,点击“播放”进入调试(注意:这里不是刷新页面,而是点击“播放”才能调试到我们需要的链接,这是我在逆向分析所犯的错误,哈哈

可以看到运行后网址不是存储评论的网址,因此我们点击运行按钮,直到网址是我们所需要的。

发现参数是一长串,因此我们换下一个“调用堆栈”,逐步寻找,知道我们发现这个堆栈

我们对比它的上一步,可以肯定参数是在这一堆栈加的密。

为寻找这一步程序里的参数加密函数。取消之前的断点,退出调试,在这一加密堆栈中打上断点,重新刷新界面,然后点击运行按钮,直到参数网址是为我们需要的评论网址。然后可以发现加密函数为window.asrsea()

我们可以发现加密函数如下:

使用加密函数的地方为:

逆向分析可知,函数d的一个参数d为需要加密的数据,内容为i8a,JSON.stringify表示将数据i8a对象转化为字符串

在控制台执行下图显示内容,发现d函数的后面三个参数e,f,g都为定值

然后对加密函数d一步步分析, var h = {} ==> 为定义一个变量 i = a(16) ==> 调用a函数,生成一个随机的字符串 return h.encText = b(d, g), h.encText = b(h.encText, i), h.encSecKey = c(i, e, f), h encText调用两次b函数,进行参数加密,得到的结果就是我们需要的params encSecKey则是调用c函数,得到我们需要的encSecKey 其中b函数表示使用AES算法加密 c函数的e,f参数为定值,i为随机值,c函数没有随机内容,故但我们给定i,就给定了encSecKey(见下图给定i和encSecKey)

二.思路总结

1.利用加密过后的数据作为参数请求网址‘https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=’ 2.利用字典,列表等基础知识在上一步请求的内容中提取歌曲的网址链接 3.请求歌曲的链接并下载歌曲

三.python实现

运行后,下载的音乐可以播放

仅供学习,切勿商用。欢迎大家讨论学习。

标签:
x 广告
x 广告
© 2021 东方早报网 版权所有,备案号:沪ICP备2020036824号-8邮箱:562 66 29@qq.com