网易云音乐评论抓取(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链接

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
抓取网易音乐的脚本如下: ```python import requests import json # 设置请求头信息 headers = { 'Referer': 'https://music.163.com/', 'Host': 'music.163.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.9', } # 请求接口获取歌曲信息 def get_song_info(song_id): url = 'https://music.163.com/api/song/detail/?id=' + str(song_id) + '&ids=%5B' + str(song_id) + '%5D' response = requests.get(url, headers=headers) song_info = json.loads(response.text) return song_info # 解析歌曲信息,获取歌曲名和歌手名 def parse_song_info(song_info): song_name = song_info['songs'][0]['name'] singer_name = song_info['songs'][0]['artists'][0]['name'] return song_name, singer_name # 获取歌曲评论 def get_song_comments(song_id): url = 'https://music.163.com/api/v1/resource/comments/R_SO_4_%s/?rid=R_SO_4_%s&offset=0&total=true&limit=100' % (song_id, song_id) response = requests.get(url, headers=headers) comments_info = json.loads(response.text) comments = [comment['content'] for comment in comments_info['comments']] return comments # 主函数,遍历歌单中的歌曲并抓取信息 def main(): song_list_id = '歌单ID' # 此处填写歌单ID url = 'https://music.163.com/playlist?id=' + song_list_id response = requests.get(url, headers=headers) songs_info = json.loads(response.text.split('[')[1].split(']')[0] + ']') for song_info in songs_info: song_id = song_info['id'] song_info = get_song_info(song_id) song_name, singer_name = parse_song_info(song_info) comments = get_song_comments(song_id) print('歌曲名:', song_name) print('歌手名:', singer_name) print('评论数:', len(comments)) print('评论列表:', comments) print('\n') if __name__ == '__main__': main() ``` 使用方法: 1. 将代码中的`歌单ID`替换为你要抓取的歌单ID。 2. 运行脚本,即可抓取歌单中所有歌曲的信息,包括歌曲名、歌手名和评论列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值