怎样在Python中抓取网易云音乐评论并导出Excel

落涛酱_3272

落涛酱_3272

2026-10-21

800人浏览

原创

网易云音乐评论接口已强制加密,需用playwright等无头浏览器执行前端加密逻辑获取数据。直接requests请求会返回-460错误,因服务端仅接受webcrypto+aes+rsa混合加密的密文请求,推荐注入window.asrsea()生成参数并拦截xhr响应。

怎样在python中抓取网易云音乐评论并导出excel

网易云音乐评论接口已加密,直接 requests 无法获取真实数据

现在网易云音乐所有评论相关接口(如 /weapi/v1/resource/comments)都使用 WebCrypto + AES-128-CBC + RSA 混合加密,请求体是密文,requests.get() 或 requests.post() 直接发原始参数会返回空数据或 {"code": -460} 错误。这不是反爬强度问题,而是服务端根本不认未加密的请求。

常见错误现象:
• 请求返回 {"code":-460,"msg":"Cheating"}
• comments 字段为空数组,但网页能正常显示
• 抓包看到的 params 和 encSecKey 是长字符串,手动拼接后仍失败(因为加密逻辑依赖时间戳、随机数、RSA公钥等动态因子)

实操建议:
• 不要尝试“自己实现加密”——网易云加密逻辑在前端 JS 中持续更新,2023年后已加入混淆、调试陷阱和环境检测(如检查 window.chrome)
• 真实可行路径只有两条:用 PyExecJS / Node.js 执行原始加密 JS(需维护 JS 文件同步),或改用无头浏览器驱动真实页面

推荐方案:用 Playwright 启动 Chromium 并注入 JS 提取评论

Playwright 能加载完整页面、执行加密逻辑、绕过大部分环境检测,且比 Selenium 更稳定。关键不是“模拟登录”,而是让浏览器自己完成加密并拿到响应。

使用场景:
• 只需抓少量歌曲/专辑(比如单个 song_id=186016)的前 500 条热评+最新评论
• 不需要高频轮询(避免触发风控)
• 你有本地 Node.js 环境(Playwright 依赖它)

实操建议:
• 安装:pip install playwright,然后运行 playwright install chromium
• 目标 URL 格式为 https://music.163.com/#/song?id=186016,注意是 hash 路由,需等待 iframe 加载完成
• 在页面中执行 JS 注入,调用网易云已有的 window.asrsea() 函数生成加密参数(该函数存在于页面 <script></script> 中)
• 用 page.evaluate() 获取评论 DOM 元素,或更可靠地:拦截 XHR 响应,匹配 /weapi/v1/resource/comments 请求,读取其 response.json()

示例片段(截取关键逻辑):

huaweicloud-python-sdk-helper
huaweicloud-python-sdk-helper

华为云 Python SDK 查询工具。自动发现已安装 SDK 的服务包、Client类、API 方法、入参详情、类信息(__init__ 参数、属性、类型、描述),支持关键字搜索,快速定位目标 API 使用方法。

下载
await page.goto('https://music.163.com/#/song?id=186016')<br>await page.waitForTimeout(2000)  # 等 iframe 渲染<br>const comments = await page.evaluate(async () => {<br>  // 拦截并等待第一个评论接口响应<br>  return new Promise(resolve => {<br>    const xhr = new XMLHttpRequest();<br>    xhr.open('POST', '/weapi/v1/resource/comments');<br>    xhr.onload = () => resolve(JSON.parse(xhr.responseText));<br>    xhr.send(JSON.stringify({<br>      params: window.asrsea(...),<br>      encSecKey: window.asrsea(...)<br>    }));<br>  });<br><h3>导出 Excel 时注意字段清洗和编码边界</h3><p>网易云评论 JSON 中的 <code>content</code> 可能含换行符、emoji、零宽空格(<code>\u200b</code>)、HTML 实体(如 <code>&</code>),直接写入 <code>pandas.DataFrame.to_excel()</code> 会导致 Excel 打开报错或格式错乱。</p><p>常见错误现象:<br>• Excel 提示“发现不可读内容”,点击恢复后文字错位<br>• 评论内容在单元格中显示为 <code>#VALUE!</code> 或空白<br>• 导出后中文变成乱码(实际是 Excel 默认 ANSI 编码打开 UTF-8 文件)</p><p>实操建议:<br>• 用 <code>re.sub(r'[\x00-\x08\x0b-\x0c\x0e-\x1f]', '', text)</code> 清洗控制字符<br>• 将 emoji 替换为占位符(如 <code>text.encode('utf-16', 'surrogatepass').decode('utf-16')</code> 不推荐;稳妥做法是 <code>emoji.demojize(text)</code>)<br>• 导出时不依赖 <code>openpyxl</code> 默认引擎,显式指定:<code>df.to_excel("comments.xlsx", engine="openpyxl", index=False)</code><br>• 不要双击直接打开 .xlsx,用 Excel 菜单“数据 → 自获取 → 从工作簿”导入,可规避编码识别错误</p><h3>绕过账号登录限制的最小可行方式</h3><p>网易云对未登录用户限制:只能看前 15 条热评,且无法访问 <code>/weapi/v1/resource/comments</code> 接口。但“未登录”不等于“没 Cookie”,关键在于复用一个有效的 <code>NESSTID</code> 和 <code>_ntes_nnid</code>。</p><p>使用场景:<br>• 你有一台长期登录网易云的电脑(浏览器有有效会话)<br>• 不想写登录逻辑(用户名密码易被封)<br>• 只需每天手动更新一次 Cookie</p><p>实操建议:<br>• 打开 Chrome 开发者工具 → Application → Cookies → 复制 <code>NESSTID</code>、<code>_ntes_nnid</code>、<code>__csrf</code> 三个值<br>• 在 Playwright 启动时注入:<code>context.add_cookies([{"name": "NESSTID", "value": "...", "domain": ".163.com", "path": "/"}])</code><br>• 注意:Cookie 有效期约 7 天,过期后请求返回 <code>{"code": 301}</code>,需重新提取<br>• 不要传 <code>musicu</code> 或 <code>__remember_me</code>——它们含敏感信息且容易触发风控</p><p>真正难的从来不是“怎么导出 Excel”,而是如何让那一串 <code>params</code> 和 <code>encSecKey</code> 被服务器认可。每次网易前端 JS 更新,加密入口函数名、参数顺序、RSA 公钥位置都可能变,硬编码必崩。所以别省那几秒启动浏览器的时间。</p>

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1771

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4624

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1749

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

27297

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3287

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3307

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1203

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2563

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 44.5万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 3.6万人学习