Python 网易云音乐评论爬虫
引言
之前网易云音乐和农夫山泉合作,将热门评论印在农夫山泉上引爆了朋友圈。于是想爬取一下网易云的评论。网上搜了一下,对于网易云评论的爬虫不少,主要参考这篇文章:对网易云音乐参数(params,encSecKey)的分析 。在此基础上,添加了爬取云音乐飙升榜中歌曲,再去爬取这些歌曲的评论。在做项目的过程中还是遇到了一些问题,在此记录下来
思路
- 爬取云音乐飙升榜中的歌曲相关信息
- 爬取对应歌曲的热门评论
- 爬取对应歌曲的前20条最新评论
问题
1. 云音乐飙升榜中歌曲信息是JS动态生成,直接爬取拿不到
最开始是想从界面上爬取数据,但是发现榜单歌曲是JS动态生成的,需要分析JS代码后才能获取。Google后发现网易云有提供现成的接口api,直接可以用,返回的是JSON格式数据,省去分析JS的过程了。
# 排行榜api,本项目爬取云音乐飙升榜
# http://music.163.com/api/playlist/detail?id=2884035 # 网易原创歌曲榜
# http://music.163.com/api/playlist/detail?id=19723756 # 云音乐飙升榜
# http://music.163.com/api/playlist/detail?id=3778678 # 云音乐热歌榜
# http://music.163.com/api/playlist/detail?id=3779629 # 云音乐新歌榜
# 歌单api
# http://music.163.com/api/playlist/detail?id=123415635 # 云音乐歌单——【华语】中国风的韵律,中国人的印记
# http://music.163.com/api/playlist/detail?id=122732380 # 云音乐歌单——那不是爱,只是寂寞说的谎
2. Fiddler的代理问题
利用Fiddler在线调试的时候,直接在Chrome中刷新,发现没有抓取到core.js。
查找资料,发现虽然Fiddler安装好就能用,但是抓的HTTPS过程不全,还需要在Chrome中配置一下。
配置方法:Fiddler Chrome配置和抓包
在SwitchyOmega插件中切换为Fiddler代理后,还需要注意的是,不能直接刷新界面,这样Fiddler还是抓不到,要点击SwitchyOmega中设置的代理,通过这种方式刷新界面,Fiddler就能抓到core.js了。
同样使用Fiddler的AutoResponder时,将浏览器JS替换为本地JS,也要用这种方式刷新界面,consloe中才会有日志输出
3. 将网易云JS中加密方法转为Python实现遇到的问题
原文中对于第二个参数encSecKey固定为同一个值,虽然可以拿到返回的数据,但是不知道用固定值爬取的数据多了,会不会直接给我IP封掉,所以还是用Python实现了encSecKey值的获取方法,代码如下:
def RSA_encrypt(n_str, e_str, random_str): # RSA加密n = int(n_str, 16) # RSA modulus,RSA算法中大素数相乘的结果,16进制e = int(e_str, 16) # RSA算法中的e,和n一起组成公钥(n,e),16进制cryptor = RSA.construct((n, e)) # 构造加密器# 网易云JS中的encryptedString()将16位随机字符串倒序了,所以要生成与JS一样的密文,这里也要倒序,而且下面加密时,要求为字节,所以编码为ascii码text = random_str[::-1].encode('ascii')encrypt_text = cryptor.encrypt(text, '')[0] # 网易云JS中第二个参数为空,这里也为空。查看encrypt()源码发现会返回两个值,第一个是密文,第二个值总为空encrypt_text = binascii.b2a_hex(encrypt_text).decode('utf-8') # encrypt_text为二进制,转为十六进制然后再解码成字符串才是最后要post的密文return encrypt_textdef get_encSecKey(random_str, second_params, third_params): # 产生POST的第二个参数encSecKey = RSA_encrypt(third_params, second_params, random_str)return encSecKey
这里用的是RSA加密,需要注意的是网易云JS中将输入的16位随机字符串倒序了,所以这里在加密之前也要将其倒序,并且转为byte类型。
获取第一个参数params时用的是AES加密,网易云JS中采用了两次加密,第二次加密直接对第一次加密结果进行加密,但在Python中第一次加密之后的结果为byte类型,第二次加密之前需要将其转为String类型,否则会报TypeError: can’t concat str to bytes,代码如下:
def AES_encrypt(text, key): # AES加密iv = '0102030405060708'pad = 16 - (len(text) % 16) # 明文补足为16的倍数,如果正好是16的倍数,再补16位text += pad * chr(pad) # chr()返回对应数值的ascii码,如果少一位,补充一个数值1对应的ascii,如果少两位,补充两个数字2对应的ascii,以此类推encryptor = AES.new(key, AES.MODE_CBC, iv) # key为密钥,iv为初始偏移量encrypt_text = encryptor.encrypt(text) # 加密encrypt_text = base64.b64encode(encrypt_text) # 二级制编码,用64个字符来表示任意二进制数据return encrypt_textdef get_params(first_param, forth_param, random_str): # 产生POST的第一个参数encText = AES_encrypt(first_param, forth_param).decode('utf-8') # AES加密出来是byte类型,再次加密时需要先将其转为Stringparams = AES_encrypt(encText, random_str)return params
总结
本项目主要的时间花费在分析网易云音乐的JS源码上,搞清楚了JS源码是怎么请求数据的,后面爬虫就很顺利了,后面有时间还是要学一学JS,对于提高爬虫效率有很大的帮助。
项目地址
网易云音乐评论爬虫
上面是项目地址,觉得还可以的话,给个star哦
参考资料
对网易云音乐参数(params,encSecKey)的分析
解析网易云音乐的加密方式
python3.x爬取网易云音乐,超详细版
python爬虫实例–网易云音乐排行榜爬虫
Python 网易云音乐评论爬虫相关推荐
- python爬虫网易云音乐评论最多的歌_Python网易云音乐评论爬虫,歌曲的全部评论...
用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处 ...
- python 网易云音乐评论爬取3
参考链接: 解析网易云音乐的加密方式 https://www.jianshu.com/p/069e88181488 找到参数的加密方法 首先我们先看评论的加载方式,打开一首音乐的主页,然后打开开发工具 ...
- 网易云音乐评论爬虫:爬取全部热门歌曲及其对应的id号(附全部代码)
今天我给大家介绍一下用Python爬取网易云音乐全部歌手的热门歌曲. 由于歌手个人主页的网页源代码中还嵌入了一个子网页(框架源代码里面包含了我们需要的信息),因此我们不能使用requests库来爬取, ...
- 网易云音乐评论爬虫(2):歌曲的全部评论
用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处 ...
- 网易云音乐评论爬虫 params encSecKey逆向分析!
网易云评论接口加密破解仅用于研究和学习使用 首先通过抓包分析评论是通过js动态加载的 接口链接为:https://music.163.com/weapi/comment/resource/commen ...
- 网易云音乐评论 可视化分析
之前已经用python获取了网易云音乐的评论数据,下一步的工作就是数据分析了.一般数据分析无非是采用(统计)数字.图或者表的形式来展现数据之中隐含的信息.其中图和表显然是最直观的了.所以这里我使用可视 ...
- Python爬虫之js加密破解,抓取网易云音乐评论生成词云
js破解历程 前言 技能点 界面概况 静态网页动态网页 页面解析 step1: 找参数step2:分析js函数step3:分析参数step4: 校验step5:转为python代码 编写爬虫 很多人学 ...
- python爬取网易云音乐_Python 从零开始爬虫(七)——实战:网易云音乐评论爬取(附加密算法)...
前言 某宝评论区已经成功爬取了,jd的也是差不多的方法,说实话也没什么好玩的,我是看上它们分析简单,又没加密才拿来试手的.如果真的要看些有趣的评论的话,我会选择网易云音乐,里面汇聚了哲学家,小说家,s ...
- python爬虫网易云音乐评论最多的歌_Python爬虫44万条数据揭秘:如何成为网易云音乐评论区的网红段子手?...
获取数据 其实逻辑并不复杂: 1.爬取歌单列表里的所有歌单url. 2.进入每篇歌单爬取所有歌曲url,去重. 3.进入每首歌曲首页爬取热评,汇总. 歌单列表是这样的: 翻页并观察它的url变化,注意 ...
最新文章
- nero 8.0刻录系统光盘
- pythonのgevent同步异步区别
- 中国和英国的旅行的对比
- Leetcode题库 4.寻找两个正序数组的中位数(双指针法 C实现)
- sql怎么修改服务器角色,创建、删除或修改角色 (Management Studio)
- [Learn AF3]第七章 App framework组件之Popup
- 【万里征程——Windows App开发】DatePickerTimepicker
- python写爬虫4-多线程爬虫(采集58出租房信息)_python实现多线程爬虫
- Java学习资料-java基本数据类型
- 二进制BIN文件比较工具,也适合用来对比解析BIN文件,发现数据存储规律,更改数据。
- 《概率论与数理统计》
- 2021年域名买卖会有哪些骗局?
- linux安装识别不到scsi硬盘,Linux下不重起识别SCSI硬盘
- autoJS 网易公开课app封装函数
- delphi异步与javascript
- 深入浅出scala之函数(匿名函数)(P41-45)
- MySQL—关联查询与子查询(从小白到大牛)
- js逆向-ast混淆还原入门案例(2)
- 基于PSO优化VIC算法的WORM蠕虫检测matlab仿真
- 阅读WPF揭秘前两章探索Silverlight运行的基本原理和RIA工作流程的密码(二)