【爬虫系列】用Python爬取网抑云(music)评论
目录
- 前言
- 分析
- 代码过程
- 成果展示
- 完整代码
前言
本案例难度一般,需要逆向两个加密参数,对于初学者还是比较麻烦的,希望通过我的分析过程,能帮助大家快速理解!
分析
首先找到评论数据接口,看看有没有什么反扒手段?
发现有两个请求参数都加密了,params应该都知道,请求接口时提交的参数,那我们就全局搜索encSecKey
下图应该就是生成encSecKey的地方,通过bKB8t函数生成,那我们继续看bKB8t是干嘛的
js生成代码
var bKB8t = window.asrsea(JSON.stringify(i7b), buU5Z(["流泪", "强"]), buU5Z(Rg1x.md), buU5Z(["爱心", "女孩", "惊恐", "大笑"]));
JSON.stringify(i7b)应该是我们请求的参数,其余的都是固定生成的,我们在补代码的时候,可以直接写死!
var b = "010001";var c = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7";var d = "0CoJUm6Qyw8W8jud";
继续找window.asrsea这个方法
把这个方法整段都抠出来,然后缺什么就补什么
还需要大家自己扣出来的函数方法:CryptoJS,setMaxDigits,encryptedString,RSAKeyPair,这些都是没有定义的,一定要补全,不然是跑不起来的,因为扣代码过程比较麻烦,图文不太好讲解,就不具体说明了
代码过程
使用execjs库运行js,得到加密参数(我这里已经补全了js)
import requests, execjs, jsondef encrypt(params):with open("music163.js", "r", encoding="utf-8") as f:ctx = execjs.compile(f.read())result = json.loads(ctx.call("encrypt", json.dumps(params))) # 将请求参数编码成json字符串return result
评论API:
aHR0cHM6Ly9tdXNpYy4xNjMuY29tL3dlYXBpL3YxL3Jlc291cmNlL2NvbW1lbnRzL1JfU09fNF8xMzg0MDI2ODg5P2NzcmZfdG9rZW49
请求评论接口
def get_page(page):params = {"csrf_token": "","limit": "20", # 每页限制个数"offset": str(page * 20), # 控制翻页,每次增加20"rid": "R_SO_4_1384026889", # R_SO_4_ 加上歌曲id"total": "true" if i == 0 else "false", # 只有第1页为true,后面均为false}url = "https://music.163.com/weapi/v1/resource/comments/R_SO_4_1384026889?csrf_token="try:response = requests.post(url, headers=headers, data=encrypt(params))if response.status_code == 200:return response.json()else:print("爬取失败:", response.status_code)except Exception as e:print("ERROR:", e)return None
获取评论数据
def parse(response):comments = response["comments"]for comment in comments:content = comment["content"]nickname = comment["user"]["nickname"]print(nickname + ":" + content + "\n")
成果展示
完整代码
import requests, execjs, jsonheaders = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
}def encrypt(params):with open("music163.js", "r", encoding="utf-8") as f:ctx = execjs.compile(f.read())result = json.loads(ctx.call("encrypt", json.dumps(params))) # 将请求参数编码成json字符串return resultdef get_page(page):params = {"csrf_token": "","limit": "20", # 每页评论数"offset": str(page * 20), # 每次增加20"rid": "R_SO_4_1303289043", # R_SO_4_ 加上歌曲id"total": "true" if i == 0 else "false", # 只有第1页为true,后面均为false}url = "https://music.163.com/weapi/v1/resource/comments/R_SO_4_1303289043?csrf_token="try:response = requests.post(url, headers=headers, data=encrypt(params))if response.status_code == 200:return response.json()else:print("爬取失败:", response.status_code)return Noneexcept Exception as e:print("ERROR:", e)return Nonedef parse_page(response):if response:comments = response["comments"]for comment in comments:content = comment["content"]nickname = comment["user"]["nickname"]print(nickname + ":" + content + "\n")if __name__ == "__main__":for i in range(3): # 爬取几页就写几页html = get_page(i)parse_page(html)
js代码就不分享出来了,要是有需要的可私信我领取
点关注不迷路,本文若对你有帮助,烦请三连支持一下 ❤️❤️❤️
各位的支持和认可就是我最大的动力❤️❤️❤️
【爬虫系列】用Python爬取网抑云(music)评论相关推荐
- python爬取网抑云音乐评论
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.python爬取网抑云音乐评论 前言 提示:这里可以添加本文要记录的大概内容: python爬取网抑云音乐评论 提 ...
- python爬取网抑云歌曲下载
爬取对象 下载新歌榜中歌曲,在.py文件创建一个music文件 全部代码如下: # encoding=utf8 import requests from bs4 import BeautifulSou ...
- 深夜爬虫, 我很抱歉 , 附爬取“网抑云”最详细的爬虫教程!
最近真的是被 网抑云 这个梗刷爆了,到处都是, 生而为人,我很抱歉,哈哈哈, 碰巧最近学习了一波微信公众号的爬取方式,想试一试, 特地在此献丑了.我是沙漏, 不定期更新爬虫教学, 其余时间学java和 ...
- python爬取网易云音乐歌曲评论信息
网易云音乐是广大网友喜闻乐见的音乐平台,区别于别的音乐平台的最大特点,除了"它比我还懂我的音乐喜好"."小清新的界面设计"就是它独有的评论区了------各种故 ...
- Python 爬取网易云音乐所有评论
题图:by cfunk44 from Instagram 在使用 Ajax 技术加载数据的网站中, JavaScript 发起的 HTTP 请求通常需要带上参数,而且参数的值都是经过加密的.如果我们想 ...
- 爬虫入门——用python爬取网易云音乐热门歌手评论数
本文参考Monkey_D_Newdun 的文章 https://blog.csdn.net/Monkey_D_Newdun/article/details/79318629 用爬虫获取网易云音乐热门歌 ...
- [爬虫]网抑云音乐评论
[爬虫]网抑云音乐评论 前言 自打开网抑云之后,我久久无法忘记,是它才能带给我内心世界的波涛汹涌.我左手拿起它,右手放下它,一日复一日,我终于完成了<The Spider Of Music-16 ...
- Python爬取网易云热歌榜所有音乐及其热评
获取特定歌曲热评: 首先,我们打开网易云网页版,击排行榜,然后点击左侧云音乐热歌榜,如图: 关于如何抓取指定的歌曲的热评,参考这篇文章,很详细,对小白很友好: 手把手教你用Python爬取网易云40万 ...
- Python爬取网易云歌曲评论,做词云分析
前言 emmmm 没什么说的,想说的都在代码里 环境使用 Python 3.8 解释器 3.10 Pycharm 2021.2 专业版 selenium 3.141.0 本次要用到selenium模块 ...
最新文章
- echart(2),模拟数据导入篇
- ThreadPoolExecutor源码解析(一)
- Linux报错:Syntax error: “(“ unexpected解决办法
- 集客家客运维那些事_2011年集客家客代维考试题库V2
- L Machining Disc Rotors
- junit:junit_简而言之,JUnit:测试结构
- JAVA 测试日期的不同显示格式
- 要重复多少次变成潜意识_新股要申购多少次才能保证一定中签?
- C# WinForm DataGridView 给标题列增加序号及格式化某个字段
- 我最看不惯的几个公众号
- 华为手机android怎么解锁,怎么查看华为手机解锁
- html游戏导出存档,switch怎么导出存档-switch导出存档教程
- win10的计算机 桌面图标不见了怎么办,Win10我的电脑怎么放在桌面?Win10此电脑图标不见了的解决方法...
- Flask的jinjia2语句最详细容易理解教程
- 不同vlan间通讯单臂路由和三层交换机
- 设置Google文档离线同步,更好的高效离线工作
- steam账号连接服务器遇到问题,无法预料的服务器浏览器反应 - Steam Support
- 计算机科学与技术路线,技术路线写法
- NODE.JS DM数据库驱动简介及搭建
- SDR软件移步BG1ICA.vicp.net:8888
热门文章
- 音速启动(VStart)中使用相对路径存储应用链接
- Java使用Player播放mp3
- php cgminer,CGMINER中各个参数代表的意义(挖矿黑框参数)
- DFIG双馈异步式风力发电系统的低电压穿越(LVRT)控制算法的仿真模型,基于Crowbar电路(转子串电阻)和Chopper电路
- fastcgi中的多线程使用
- UBNT ER-4 配置IPsec实现不同网络互访
- 【游戏开发日志】【Unity】day_one
- 关于模拟电子技术、考试的讲解:序章
- 撑起个人信息的“保护伞”:数据安全合规检测与防护
- Scaffold php,scaffold: 基于 Laravel 的后台脚手架 Scaffold for laravel