引言

之前网易云音乐和农夫山泉合作,将热门评论印在农夫山泉上引爆了朋友圈。于是想爬取一下网易云的评论。网上搜了一下,对于网易云评论的爬虫不少,主要参考这篇文章:对网易云音乐参数(params,encSecKey)的分析 。在此基础上,添加了爬取云音乐飙升榜中歌曲,再去爬取这些歌曲的评论。在做项目的过程中还是遇到了一些问题,在此记录下来

思路

  1. 爬取云音乐飙升榜中的歌曲相关信息
  2. 爬取对应歌曲的热门评论
  3. 爬取对应歌曲的前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 网易云音乐评论爬虫相关推荐

  1. python爬虫网易云音乐评论最多的歌_Python网易云音乐评论爬虫,歌曲的全部评论...

    用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处 ...

  2. python 网易云音乐评论爬取3

    参考链接: 解析网易云音乐的加密方式 https://www.jianshu.com/p/069e88181488 找到参数的加密方法 首先我们先看评论的加载方式,打开一首音乐的主页,然后打开开发工具 ...

  3. 网易云音乐评论爬虫:爬取全部热门歌曲及其对应的id号(附全部代码)

    今天我给大家介绍一下用Python爬取网易云音乐全部歌手的热门歌曲. 由于歌手个人主页的网页源代码中还嵌入了一个子网页(框架源代码里面包含了我们需要的信息),因此我们不能使用requests库来爬取, ...

  4. 网易云音乐评论爬虫(2):歌曲的全部评论

    用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处 ...

  5. 网易云音乐评论爬虫 params encSecKey逆向分析!

    网易云评论接口加密破解仅用于研究和学习使用 首先通过抓包分析评论是通过js动态加载的 接口链接为:https://music.163.com/weapi/comment/resource/commen ...

  6. 网易云音乐评论 可视化分析

    之前已经用python获取了网易云音乐的评论数据,下一步的工作就是数据分析了.一般数据分析无非是采用(统计)数字.图或者表的形式来展现数据之中隐含的信息.其中图和表显然是最直观的了.所以这里我使用可视 ...

  7. Python爬虫之js加密破解,抓取网易云音乐评论生成词云

    js破解历程 前言 技能点 界面概况 静态网页动态网页 页面解析 step1: 找参数step2:分析js函数step3:分析参数step4: 校验step5:转为python代码 编写爬虫 很多人学 ...

  8. python爬取网易云音乐_Python 从零开始爬虫(七)——实战:网易云音乐评论爬取(附加密算法)...

    前言 某宝评论区已经成功爬取了,jd的也是差不多的方法,说实话也没什么好玩的,我是看上它们分析简单,又没加密才拿来试手的.如果真的要看些有趣的评论的话,我会选择网易云音乐,里面汇聚了哲学家,小说家,s ...

  9. python爬虫网易云音乐评论最多的歌_Python爬虫44万条数据揭秘:如何成为网易云音乐评论区的网红段子手?...

    获取数据 其实逻辑并不复杂: 1.爬取歌单列表里的所有歌单url. 2.进入每篇歌单爬取所有歌曲url,去重. 3.进入每首歌曲首页爬取热评,汇总. 歌单列表是这样的: 翻页并观察它的url变化,注意 ...

最新文章

  1. 在Ubuntu 16.0.4.5 LTS上安装python 2.7版本的cv2模块
  2. document.getElementById 学习总结
  3. 拔掉网线时Socket的检查方法
  4. python opencv 录制视频_OpenCV Python 录制视频
  5. leetcode 482. 密钥格式化(Java版)
  6. imagick php 缩放,php使用imagick模块实现图片缩放、裁剪、压缩示例
  7. vscode 推荐premiter_vscode 有哪些让人眼前一亮的插件?
  8. shell读取文件的每一行
  9. matlab pdm转pcm_STM32F407 PDM转PCM问题
  10. elementui 嵌套表单验证_vue elementUI 表单嵌套验证的实例代码
  11. 关于python中的pow(1010、32)_关于Python中的??pow(1010,32),下列说法正确的是.
  12. Verilog数字信号处理---基础1
  13. Fiddler安装及使用教程
  14. 设置页面包含子页面iframe用法
  15. LOCAL_PRIVILEGED_MODULE 详解(3)
  16. unity实用技能,控制renderQueue解决NGUI与Unity3D物体渲染顺序问题
  17. 下载NVIDIA官方驱动教程
  18. YOLO自带的图像数据增强方法
  19. 帝都某外企裁员,补偿673252.62元 !准备回家躺平了 !
  20. 阿里云携手开源中国平台发百万悬赏项目

热门文章

  1. 2022年全球市场静脉注射用包装总体规模、主要生产商、主要地区、产品和应用细分研究报告
  2. 泰坦尼克号生存预测分析
  3. 网上有哪些程序员的学习网站?程序员必备网站!
  4. 基于RS422通信的FPGA软件设计第一天
  5. Windows2008R2 多用户同时远程登录服务器
  6. Windows设置多用户同时远程登录
  7. readOnly属性的去除
  8. 性能监视器(Performance Monitor)指标说明
  9. Oracle写merge语录,Oracle数据库MERGE语句
  10. 如何成为一名漏洞赏金猎人