目录

  • 前言
  • 分析
  • 代码过程
  • 成果展示
  • 完整代码

前言

本案例难度一般,需要逆向两个加密参数,对于初学者还是比较麻烦的,希望通过我的分析过程,能帮助大家快速理解!

分析

首先找到评论数据接口,看看有没有什么反扒手段?

发现有两个请求参数都加密了,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)评论相关推荐

  1. python爬取网抑云音乐评论

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.python爬取网抑云音乐评论 前言 提示:这里可以添加本文要记录的大概内容: python爬取网抑云音乐评论 提 ...

  2. python爬取网抑云歌曲下载

    爬取对象 下载新歌榜中歌曲,在.py文件创建一个music文件 全部代码如下: # encoding=utf8 import requests from bs4 import BeautifulSou ...

  3. 深夜爬虫, 我很抱歉 , 附爬取“网抑云”最详细的爬虫教程!

    最近真的是被 网抑云 这个梗刷爆了,到处都是, 生而为人,我很抱歉,哈哈哈, 碰巧最近学习了一波微信公众号的爬取方式,想试一试, 特地在此献丑了.我是沙漏, 不定期更新爬虫教学, 其余时间学java和 ...

  4. python爬取网易云音乐歌曲评论信息

    网易云音乐是广大网友喜闻乐见的音乐平台,区别于别的音乐平台的最大特点,除了"它比我还懂我的音乐喜好"."小清新的界面设计"就是它独有的评论区了------各种故 ...

  5. Python 爬取网易云音乐所有评论

    题图:by cfunk44 from Instagram 在使用 Ajax 技术加载数据的网站中, JavaScript 发起的 HTTP 请求通常需要带上参数,而且参数的值都是经过加密的.如果我们想 ...

  6. 爬虫入门——用python爬取网易云音乐热门歌手评论数

    本文参考Monkey_D_Newdun 的文章 https://blog.csdn.net/Monkey_D_Newdun/article/details/79318629 用爬虫获取网易云音乐热门歌 ...

  7. [爬虫]网抑云音乐评论

    [爬虫]网抑云音乐评论 前言 自打开网抑云之后,我久久无法忘记,是它才能带给我内心世界的波涛汹涌.我左手拿起它,右手放下它,一日复一日,我终于完成了<The Spider Of Music-16 ...

  8. Python爬取网易云热歌榜所有音乐及其热评

    获取特定歌曲热评: 首先,我们打开网易云网页版,击排行榜,然后点击左侧云音乐热歌榜,如图: 关于如何抓取指定的歌曲的热评,参考这篇文章,很详细,对小白很友好: 手把手教你用Python爬取网易云40万 ...

  9. Python爬取网易云歌曲评论,做词云分析

    前言 emmmm 没什么说的,想说的都在代码里 环境使用 Python 3.8 解释器 3.10 Pycharm 2021.2 专业版 selenium 3.141.0 本次要用到selenium模块 ...

最新文章

  1. echart(2),模拟数据导入篇
  2. ThreadPoolExecutor源码解析(一)
  3. Linux报错:Syntax error: “(“ unexpected解决办法
  4. 集客家客运维那些事_2011年集客家客代维考试题库V2
  5. L Machining Disc Rotors
  6. junit:junit_简而言之,JUnit:测试结构
  7. JAVA 测试日期的不同显示格式
  8. 要重复多少次变成潜意识_新股要申购多少次才能保证一定中签?
  9. C# WinForm DataGridView 给标题列增加序号及格式化某个字段
  10. 我最看不惯的几个公众号
  11. 华为手机android怎么解锁,怎么查看华为手机解锁
  12. html游戏导出存档,switch怎么导出存档-switch导出存档教程
  13. win10的计算机 桌面图标不见了怎么办,Win10我的电脑怎么放在桌面?Win10此电脑图标不见了的解决方法...
  14. Flask的jinjia2语句最详细容易理解教程
  15. 不同vlan间通讯单臂路由和三层交换机
  16. 设置Google文档离线同步,更好的高效离线工作
  17. steam账号连接服务器遇到问题,无法预料的服务器浏览器反应 - Steam Support
  18. 计算机科学与技术路线,技术路线写法
  19. NODE.JS DM数据库驱动简介及搭建
  20. SDR软件移步BG1ICA.vicp.net:8888

热门文章

  1. 音速启动(VStart)中使用相对路径存储应用链接
  2. Java使用Player播放mp3
  3. php cgminer,CGMINER中各个参数代表的意义(挖矿黑框参数)
  4. DFIG双馈异步式风力发电系统的低电压穿越(LVRT)控制算法的仿真模型,基于Crowbar电路(转子串电阻)和Chopper电路
  5. fastcgi中的多线程使用
  6. UBNT ER-4 配置IPsec实现不同网络互访
  7. 【游戏开发日志】【Unity】day_one
  8. 关于模拟电子技术、考试的讲解:序章
  9. 撑起个人信息的“保护伞”:数据安全合规检测与防护
  10. Scaffold php,scaffold: 基于 Laravel 的后台脚手架 Scaffold for laravel