网易云音乐api
因为非常喜欢听网易云音乐,其社交化的功能真的非常的体验非常好,可以让有相同音乐爱好的人聚集在一起,一起互相交流。毕竟一边听歌一边看评论真的是非常的有意思。除此之外,其歌单功能,炫酷的界面等,可以称登上是良心之作。当然最有意思还是网友贡献的评论,有一段时间网易将得赞数最高的评论打印出来,印在地铁里,感动了无数人。
于是,就想写个爬虫,把他的数据爬下来,岂不美哉。于是动手研究一番。
关于加密
经过研究发现,为了防止爬虫,对于一些敏感的数据,它对传递的参数进行了加密。经过查找js, 打断点等,终于找到一些端倪。
其实过程比较简单,它每次的请求都是两个参数params 和 seckey。
- params: 是请求的加密之后的参数
- seckey: 用于解密参数的密钥
他的过程是这样的:
- 随机生成一个16位长的key
- 根据这个Key将参数用aes算法加密(还是两次)作为params
- 然后键key使用rsa算法进行加密作为seckey
js版本
进行加密的核心js代码如下:
1 | /** |
其中aes加密的部分依赖crypto-js加密库,rsa加密方法参见这里。
python版本
既然知道了是使用了aes 和rsa加密就好办了,而且网上也已经有人有过研究,并提供了python版本的加密方法:
1 | #!/usr/bin/enn python |
代码来源: 网易云音乐新版WebAPI分析
Java版本
重点来了,由于很多人习惯用java来写爬虫,下面我提供一种java版本的:
1 | private static final String modulus = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7", |
不过在使用过程中,我发现在进行rsa加密时,可能时计算量太大,使得cpu占用达到100%。不过还好,有一个非常好的解决办法,那就是使用固定的seckey和enckey就可以了,不需要每次都生成的新的seckey然后加密成enckey。【偷笑】
好了正文开始:
1. 获取歌曲信息
- url : [http://music.163.com/song?id=[229383\]](http://music.163.com/song?id=[229383])
- params : 歌曲Id
- method : get
- return : Html / 包含歌曲名称,专辑,歌手
2. 歌曲评论
- url : [http://music.163.com/weapi/v1/resource/comments/R_SO_4_[229383\]/?csrf_token=](http://music.163.com/weapi/v1/resource/comments/R_SO_4_[229383]/?csrf_token=)
- params: {“rid”:”R_SO_4_229383”,”offset”:”0”,”total”:”true”,”limit”:”20”,”csrf_token”:””}
- 参数说明 : 需要加密
- method : post
- return : json /
{“code”:200,”isMusician”:false,”userId”:-1,”topComments”:[],”moreHot”:false,”hotComments”:[],”total”:2323, “comments”:[]}
3. 歌手信息
- url : http://music.163.com/artist?id=7652
- method : get
- return : html / top50歌曲
4. mv信息评论信息
- url : [http://music.163.com/weapi/v1/resource/comments/R_MV_5_[5331658\]/?csrf_token=](http://music.163.com/weapi/v1/resource/comments/R_MV_5_[5331658]/?csrf_token=)
- method : post
- 参数说明: 需要加密
- params : “{“rid”:”R_MV_5_5331658”,”offset”:”0”,”total”:”true”,”limit”:”20”,”csrf_token”:””}”
- return : json /
{“isMusician”:false,”userId”:-1,”topComments”:[],”moreHot”:false,”hotComments”:[],”code”:200,”comments”:[],”total”:5,”more”:false}
5. 歌单信息
- url : http://music.163.com/playlist?id=523664323
- method : get
- return : html / 播放量,
6. 歌单评论信息
- url : http://music.163.com/weapi/v1/resource/comments/A_PL_0_523664323/?csrf_token=
- params : {“rid”:”A_PL_0_523664323”,”offset”:”0”,”total”:”true”,”limit”:”20”,”csrf_token”:””}
- 参数说明: 需要加密
- method : post
- return : json /