爬取网易云音乐歌单评论数据

进入网易云歌单:

通过POST请求数据,需要在请求表单加入请求参数

可以看到这两个参数每次刷新后的值都是不一样的,需要获取到这两个加密参数

使用关键字搜索params定位到加密位置,会搜索到很多个params

一个一个查看,可以看到这一条带有params和encSecKey,是我们要找的两个加密参数

可以看到这两个都是从bYE2x中获取的值

而bYE2x变量中window调用了asrsea()方法

点进去

加密参数的生成函数应该就是这个,函数中传入了四个参数d,e,f,g,

首先查看传入的参数值,添加断点进行调试

直到页面到加载评论这一步,可以看到d的值出现变化

第一个值和第二个值是歌单id \"rid\":\"A_PL_0_13400885874\"

第三个值是歌单页数 \"pageNo\":\"1\"

第四个值是每页返回的评论数量 \"pageSize\":\"20\"

cursor 游标,用于时间倒序分页,-1 表示从最新开始

offset 偏移量,用于分页时控制数据位置,这里是 0

orderType  排序方式:1 可能表示按热度排序,2 可能是按时间

csrf_token 跨站请求伪造的令牌,这里是空的,说明请求不包含校验

其它三个值e,f,g都是固定值

可以看到加密函数中还调用了a、b、c函数

i是随机生成的 AES 密钥(长度16)

encText是经过了两次AES加密

encSecKey用 RSA 的公钥 (e, f) 对随机 AES 密钥 i 进行加密 

那么我们可以固定i,并获得 i 对应的encSecKey(获取encText和encSecKey必须是相同的i),那么接下来只需要在python代码中实现AES加密函数

b使用了AES加密(对称加密),a是要加密的数据,b是AES加密的密钥(也就是刚刚的d和g)

先将一些参数转换为UTF-8编码的字节串

AES.encrypt(e,c,{iv:d},mode:CryptoJS.mode.CBC)中,e是要加密的数据,c是密钥,d是初始化向量,加密模式是CBC。

转为python代码

def b(a,b):
    c = b.encode('utf-8')
    d = "0102030405060708".encode('utf-8')  # 固定iv向量
    e = a.encode('utf-8')
    e = pad(e, 16)  #填充

    # 创建AES加密对象
    cipher = AES.new(c, AES.MODE_CBC, d)

    # 加密数据
    encrypted_data = cipher.encrypt(e)

    # 返回Base64编码结果
    return base64.b64encode(encrypted_data).decode('utf-8')

打断点调试获取到 i 和encSecKey

完整代码网址:wyymusic-spider/comments.py at master · NDEFLL/wyymusic-spider · GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值