乐趣区

如何查看一个人写的所有网易云音乐评论

用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,那这些海量的评论里是否有自己关心的人写的呢?想通过评论看看某朋友最近的动态或者心情。但是这么多的数据如何找出指定人的评论?一页一页翻,用最原始的手动方法是行不通的,下面笔者用 python 爬虫实现这个需求,代码我会分享出去,有任何问题或者帮助都可以找我沟通。图片可以找到我
由于网易云音乐的评论都做了混淆加密处理,因此我们需要深入了解它的加密过程之后才能爬取到网易云音乐评论。
一,首先分析数据的请求方式
由于网易云音乐的评论是通过 Ajax 传输,我们打开浏览器的开发者工具(检查元素),选中控制面板中的 Network, 再点击 XHR(捕获 ajax 数据),然后点击左上角的重新加载,会看到下面图片中的数据请求列表


发现我们所需要的数据就在这 json 格式的数据中, 其中 comments 中是第一页的全部评论, 一共 20 条,hotcomments 是精彩评论一共有 15 条, 每首歌曲只有第一页评论才有精彩评论. 接着看一下它的请求头, 点击 Headers

我们发现的它是个 post 请求, 向下滑你会发现这个 post 请求还带有数据

二, 分析加密过程
通过断点调试发现 params 和 encSecKey 是由 js 脚本中的 window.asrsea()函数生成的.

我们发现 window.asrsea()函数有 4 个参数, 在浏览器的 js 控制台分别对这四个参数进行调试:

三, 生成加密参数
首先我们需要生成长度为 16 的随机字符串, 这里我们仿照上面的 javascript 的实现, 用 Python 生成 16 位长的随机字符串,接着用 Python 实现 AES 加密, 这里要用到 pycrypto 库, 先安装好这个库,然后导入加密模块,然后是 RSA 加密. 首先我简单介绍一下 RSA 的加密过程. 在 RSA 中, 明文, 密钥和密文都是数字.RSA 的加密过程可以用下列的公式来表达, 这个公式非常的重要, 你只有理解了这个公式, 才能用 Python 实现 RSA 加密.RSA 的密文是对代表明文的数字的 E 次方求 mod N 的结果, 通俗的讲就是将明文和自己做 E 次乘法, 然后将其结果除以 N 求余数, 这个余数就是密文.RSA 加密后得到的字符串长为 256, 如果不够长则进行填充 (不足部分在左侧添 0). 最后就是获取那两个加密参数。
四, 获取全部评论
上面我们获取到了两个参数 encText 和 encSecKey, 利用这两个参数来构造 post 表单数据 (Form Data), 即 data 的值:
params, encSecKey = get_params(page)
data = {‘params’: params, ‘encSecKey’: encSecKey}
歌曲评论的 URL 为:
url = ‘https://music.163.com/weapi/v…’ + str(songid) + ‘?csrf_token=’
然后把 data 加到 post 的参数中去就能获取到 json 格式的评论数据.
html = requests.post(url, headers=headers, data=data)

代码输出,如下图:有完整 15 条数据,截图范围有限,显示 6 条。

退出移动版