网易云音乐评论抓取(js逆向)

网易云音乐评论抓取(js逆向)

本文通过分析网易云音乐的js加密,通过构造相关的参数,获取网易云音乐评论。


所用语言和相关模块

  • python3.6
  • requests`

网站特点分析

通过分析网站可知:
评论获取的url:https://music.163.com/weapi/comment/resource/comments/get?csrf_token=
评论获取的方法:post
评论获取的参数:params、encSecKey
且参数为加密参数
在这里插入图片描述
在这里插入图片描述

实现过程

由上面的分析过程可以得知,实现过程分为3部分完成:
1)找出各参数的js代码
ctrl+shift+f掉出全局搜索,输入参数“encSecKey”,找出各参数形成的位置
在这里插入图片描述
在这里插入图片描述

2)分析各参数的加密逻辑
在相关的参数加密获得处打上断点,
由图可知,两个参数的值是由一个函数获取得到,其主要的参数为d,e,f,g
d:通过分析参数的格式可知,rid、threadId为歌曲id,pageNo评论页数, pageSize为页的条数,cursor为该页获取的评论的最小发布时间戳,orderType为排序规则
e为固定值010001
f为固定值00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7
g为固定值0CoJUm6Qyw8W8jud
在函数中,有个比较重要的参数i,其为随机的16位字符串,每次请求可取固定的值,取其值为3XDOKTz8borjR3H3
encSecKey的值的加密代码为h.encSecKey = c(i, e, f),由于i、e、f可为固定的值,故encSecKey取值为i=3XDOKTz8borjR3H3的加密得到1206a2796de825fceaa6d57bbfaf901ce9c13c9f7364fb721aa1260355020a9e7e753744223f165be7a1b4edda2dbac2edda6add418de29793c177c1578611e606f9a35e3d8cb44da198072531528dc551416a6242d9330d410b066f410f6c9fab866cc6b2cc73131f62669042086f3666e3336bc5a2e0acb38ddef443a615da
params的为aes二次加密得到
故此,只需实现aes加密,模拟获取相关的评论
在这里插入图片描述

在这里插入图片描述

3)python实现相关的加密代码
params参数获取:

def get_params():
    """
    获取params参数的值
    :return:
    """
    iv = "0102030405060708"
    i = '3XDOKTz8borjR3H3'
    # 获取密文
    encText = AES_encrypt(d, g, iv)
    encText = AES_encrypt(encText, i, iv)
    return encText

aes加密:

def AES_encrypt(text, key, iv):
    """
    进行aes加密
    :param text:加密的明文
    :param key:密钥
    :param iv:
    :return:
    """
    pad = 16 - len(text) % 16
    text = text + pad * chr(pad)
    encryptor = AES.new(key.encode("utf-8"), AES.MODE_CBC, iv.encode("utf-8"))
    encrypt_text = encryptor.encrypt(text.encode("utf-8"))
    encrypt_text = base64.b64encode(encrypt_text)
    return encrypt_text.decode('utf8')

全部代码

github链接

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值