总述
因为需要,做了一个音乐的抓取爬虫
下面将实现的过程进行一个描述解析,中间也在网上搜索了一些网易的爬虫讲解,由于搜索的太多,参考了许多,此处没法一一说明,总之感谢技术大牛的分析与分享。
1.歌曲搜索的分析
首先打开网页版的网易云音乐,打开浏览器的检查按钮,获取到用户向服务器发送请求的真实接口。
# 得到的接口
'http://music.163.com/weapi/cloudsearch/get/web?csrf_token='
也可以看到请求的方式为POST,还有请求参数 'params'和'encSecKey'。
这两个参数的值为一大段字符,这肯定是加密产生的,检查一下请求的原网页是否有这两个参数的信息,发现没有,所以应该是JS生成的,所以要去找js文件,将几个js文件找到,去查找是否有'params'和'encSecKey'关键字。在core的js文件里找到关键词。可以找到这两个参数是由一系列的加密算法加密生成的。
![](https://img.haomeiwen.com/i6905175/d5c23d02b530c3c4.png)
所以首先分析这个asrsea函数,得到
![](https://img.haomeiwen.com/i6905175/271f4e7e57c5a906.png)
![](https://img.haomeiwen.com/i6905175/c3d3572d8581ecbe.png)
这里可以看出加密参数是由d函数将四个参数加密得到的。
大神们可以继续解析js代码,然后将js写的加密方法用Python重写,我就采用一个笨方法直接将js文件下载,使用js文件的加密算法进行加密,得到参数。但是我们需要找到传递什么参数给函数d,才能实现正确的得到加密参数。
由于d函数将四个参数加密得到的加密参数,所以将js文件下载,修改为
![](https://img.haomeiwen.com/i6905175/4580bc2ea296e733.png)
我们通过Fiddler 抓包工具将我们修改的本地js文件替换浏览器的js文件
![](https://img.haomeiwen.com/i6905175/86538d4444dd664b.png)
替换完成后使用网页刷新请求,查看控制台显示的四个参数。
多次测试,发现四个参数只有一个是变化的,其他三个都是固定的。
p2='010001'
p3='00e0b509f6259df...此处太长,只粘贴这一点'
p4='0CoJUm6Qyw8W8jud'
p1是由固定格式组成的请求词典
{"hlpretag":"","hlposttag":"","s":"'搜索的关键词","type":"1","offset":"0","total":"true","limit":"30","csrf_token":""}
此时只需我们使用一个方法将四个参数传递给函数d,使js运行生成加密参数。
我使用的是一个execjs第三方库,还有其他许多库和方式实现。
得到加密参数后可以使用Postman 模拟一下,看能不能得到数据。
得到数据后证明已经破解了加密参数,剩下的就是数据筛选了。
2.具体歌曲链接的分析
对比上面可以,加密方式一样,只是接口和p1参数字典不同。
url='http://music.163.com/weapi/song/enhance/player/url?csrf_token='
{"ids":"歌曲的具体ID","br":128000,"csrf_token":""}
# 网易每首歌都有自己的ID
3.歌曲的歌词分析
对比上面可以,加密方式一样,只是接口和p1参数字典不同。
url='http://music.163.com/weapi/song/lyric?csrf_token='
{"id":"歌曲ID","lv":-1,"tv":-1,"csrf_token":""}
我只分析了这几个接口,其他接口感觉类似,只要得到对应接口和p1即可获取。
具体代码可访问的GitHub
网友评论