引言

之前网易云音乐和农夫山泉合作,将热门评论印在农夫山泉上引爆了朋友圈。于是想爬取一下网易云的评论。网上搜了一下,对于网易云评论的爬虫不少,主要参考这篇文章:对网易云音乐参数(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. nero 8.0刻录系统光盘
  2. pythonのgevent同步异步区别
  3. 中国和英国的旅行的对比
  4. Leetcode题库 4.寻找两个正序数组的中位数(双指针法 C实现)
  5. sql怎么修改服务器角色,创建、删除或修改角色 (Management Studio)
  6. [Learn AF3]第七章 App framework组件之Popup
  7. 【万里征程——Windows App开发】DatePickerTimepicker
  8. python写爬虫4-多线程爬虫(采集58出租房信息)_python实现多线程爬虫
  9. Java学习资料-java基本数据类型
  10. 二进制BIN文件比较工具,也适合用来对比解析BIN文件,发现数据存储规律,更改数据。
  11. 《概率论与数理统计》
  12. 2021年域名买卖会有哪些骗局?
  13. linux安装识别不到scsi硬盘,Linux下不重起识别SCSI硬盘
  14. autoJS 网易公开课app封装函数
  15. delphi异步与javascript
  16. 深入浅出scala之函数(匿名函数)(P41-45)
  17. MySQL—关联查询与子查询(从小白到大牛)
  18. js逆向-ast混淆还原入门案例(2)
  19. 基于PSO优化VIC算法的WORM蠕虫检测matlab仿真
  20. 阅读WPF揭秘前两章探索Silverlight运行的基本原理和RIA工作流程的密码(二)

热门文章

  1. gateway网关限流配置
  2. crontab定时任务时间设置
  3. velocity减法
  4. Java 和 Oracle 四舍五入问题。
  5. 详解Shell排序 -秒懂
  6. web应用常见的攻击手段
  7. Docker 搭建的大数据环境
  8. 语音录音转文字的方法使用过吗
  9. 缓存穿透、缓存击穿、缓存雪崩的理解和解决方案
  10. EduCoder实践课程——Python零基础到精通 参考答案(一)