网易云音乐的爬取

总述

因为需要,做了一个音乐的抓取爬虫
下面将实现的过程进行一个描述解析,中间也在网上搜索了一些网易的爬虫讲解,由于搜索的太多,参考了许多,此处没法一一说明,总之感谢技术大牛的分析与分享。

1.歌曲搜索的分析

首先打开网页版的网易云音乐,打开浏览器的检查按钮,获取到用户向服务器发送请求的真实接口。

# 得到的接口
'http://music.163.com/weapi/cloudsearch/get/web?csrf_token='

也可以看到请求的方式为POST,还有请求参数 'params'和'encSecKey'。
这两个参数的值为一大段字符,这肯定是加密产生的,检查一下请求的原网页是否有这两个参数的信息,发现没有,所以应该是JS生成的,所以要去找js文件,将几个js文件找到,去查找是否有'params'和'encSecKey'关键字。在core的js文件里找到关键词。可以找到这两个参数是由一系列的加密算法加密生成的。


js里产生参数的地方

所以首先分析这个asrsea函数,得到


asrsea函数由d函数生成

d函数生成两个加密的参数

这里可以看出加密参数是由d函数将四个参数加密得到的。
大神们可以继续解析js代码,然后将js写的加密方法用Python重写,我就采用一个笨方法直接将js文件下载,使用js文件的加密算法进行加密,得到参数。但是我们需要找到传递什么参数给函数d,才能实现正确的得到加密参数。

由于d函数将四个参数加密得到的加密参数,所以将js文件下载,修改为


使参数能在浏览器的控制台显示

我们通过Fiddler 抓包工具将我们修改的本地js文件替换浏览器的js文件
此处是别人的图,我只是拿来显示一下这样的替换方法

替换完成后使用网页刷新请求,查看控制台显示的四个参数。
多次测试,发现四个参数只有一个是变化的,其他三个都是固定的。
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

你可能感兴趣的:(网易云音乐的爬取)