用过网易云音乐听歌的朋友都知道,在网易云音乐上每首歌后面都有很多评论。有没有人关心这些海量评论?想通过评论看看朋友最近的动态或者心情。但是有了这么多数据,您如何找出给定人的评论是什么?一页一页地翻,用最原始的手工方法是行不通的。接下来笔者使用python爬虫来实现这个需求。我将分享代码。如果您有任何问题或需要帮助,可以联系我。如果你不是开发者,有需要可以找我查wx:fas1024。由于网易云音乐的评论已经过混淆加密,所以我们需要了解它的加密过程,才能爬取到网易云音乐的评论。1、首先分析数据的请求方式。由于网易云音乐的评论是通过Ajax传输的,我们打开浏览器的开发者工具(inspectelements),在控制面板中选择Network,点击XHR(抓取ajax数据),然后点击左上角的Reload,就会看到下图中的数据请求列表,发现我们需要的数据是json格式的数据,其中comments都是第一页的评论,一共20条,hotcomments是精彩评论一共15条,以及每首歌曲只有第一页评论有精彩评论。然后查看它的请求头,点击Headers,我们发现是一个post请求,向下滑动会发现这个post请求也有数据2、分析加密过程,通过断点调试,发现params和encSecKey由js脚本中的window.asrsea()函数生成。我们发现window.asrsea()函数有4个参数。调试的三个参数:3、生成加密参数,首先我们需要生成一个长度为16位的随机字符串,这里我们按照上面javascript的实现,用Python生成一个16位的随机字符串,然后用Python来生成实施AES加密。这里要使用pycrypto库,先安装库,然后导入加密模块,再进行RSA加密。首先简单介绍一下RSA的加密过程。在RSA中,明文、密钥和密文都是数字。RSA加密过程可以用下面的公式表示。这个公式非常重要。只有理解了这个公式,你才能用Python实现RSA加密。RSA的密文是代表明文的数字的N次幂的模数的结果。也就是说,明文自己乘E次,再除以N,求余数,就是密文。RSA加密后得到的字符串长度为256,不够长就补上(不足的部分在左边加0)。最后得到两个加密参数。四、获取所有评论上面我们得到了两个参数encText和encSecKey,利用这两个参数构造post表单数据(FormData),即data的值:params,encSecKey=get_params(page)data={'params':params,'encSecKey':encSecKey}歌曲评论的URL为:url='https://music.163.com/weapi/v...'+str(songid)+'?csrf_token='然后将数据添加到帖子的参数中,获取json格式的评论数据。html=requests.post(url,headers=headers,data=data)代码输出,如下图:完整数据15条,截图范围有限,展示6条。开发者可以自己玩,需要帮助可以找我,微信:fas1024
