使用 Python + ExecJS 获取网易云音乐歌曲歌词

article/2025/6/7 13:37:45


🎵 使用 Python + ExecJS 获取网易云音乐歌曲歌词

在本篇博客中,我们将通过一个完整的 Python 脚本,利用 execjs 模块调用 JavaScript 代码,成功获取网易云音乐的歌曲歌词。整个过程涵盖了加密参数的生成、API 请求发送与歌词提取,适合有一定爬虫基础的同学参考与实践。


📦 环境准备

🐍 Python 库依赖

请先确保安装了以下依赖:

pip install requests PyExecJS

💻 Node.js 环境

由于网易云的加密参数是通过 JavaScript 实现的,我们需要借助 Node.js 来执行 JS 代码。请确保你已安装 Node,并且 execjs 能正常调用:

node -v  # 确认安装成功

📄 核心代码解析

下面是核心脚本的关键步骤及代码解释。

1️⃣ 读取加密逻辑

网易云音乐使用了前端加密,我们将其 JavaScript 加密逻辑(比如 RSA/AES 混合加密)保存为 1.js 文件:

import execjsnode = execjs.get('Node')  # 获取 Node.js 运行环境
with open('1.js', 'r', encoding='utf-8') as f:js_code = f.read()
ctx = node.compile(js_code)

2️⃣ 获取歌曲列表

我们通过网易云的搜索接口 https://music.163.com/weapi/search/suggest/web,发送带加密参数的 POST 请求:

songname = input('输入歌曲名: ')
ik = f'{{"s":"{songname}","limit":"8","csrf_token":"f8ca6f7e8ab34d79642bef1fbbdfacc4"}}'
result = ctx.call('ck', ik)headers = {'Content-Type': 'application/x-www-form-urlencoded'}
url = "https://music.163.com/weapi/search/suggest/web?csrf_token=f8ca6f7e8ab34d79642bef1fbbdfacc4"
payload = (f'params={urllib.parse.quote(result["params"])}'f'&encSecKey={urllib.parse.quote(result["encSecKey"])}'
)response = requests.post(url, headers=headers, data=payload)
songlist = response.json()["result"]["songs"]

显示搜索结果并选择歌曲:

for i, song in enumerate(songlist, 1):print(i, song["name"], song["artists"][0]["name"])choice = int(input(f"请输入歌曲前序号1-{len(songlist)}: "))
songid = songlist[choice - 1]["id"]

3️⃣ 获取歌词

搜索接口拿到 songid 后,我们通过另一个接口获取歌词内容:

ik2 = f'{{"id":"{songid}","lv":-1,"tv":-1,"csrf_token":"f8ca6f7e8ab34d79642bef1fbbdfacc4"}}'
result2 = ctx.call('ck', ik2)url = "https://music.163.com/weapi/song/lyric?csrf_token=f8ca6f7e8ab34d79642bef1fbbdfacc4"
payload = (f'params={urllib.parse.quote(result2["params"])}'f'&encSecKey={urllib.parse.quote(result2["encSecKey"])}'
)response = requests.post(url, headers=headers, data=payload)
print(response.text)

💡 小贴士

  • 你需要从网易云网页端抓包获得的 JS 加密逻辑,通常在 /weapi 接口前会有对应的加密处理。

  • csrf_token 虽然貌似是必要参数,但实际接口中多数为空字符串也可正常请求。

  • 获取歌词成功后返回的是 JSON 格式,内容在 lrc 字段中:

{"lrc": {"lyric": "[00:00.000] 歌词内容..."}
}

✅ 最终效果

通过本脚本,你可以:

  • 通过歌曲名称快速搜索网易云的匹配结果;

  • 选择指定歌曲后,获取其歌词(如果有);

  • 全过程模拟网页端加密请求,避开普通反爬机制。


🧠 总结

这篇博客展示了如何结合 Python 与 JavaScript 环境,实现对网易云音乐的加密接口调用。对于有一定爬虫经验的开发者,这是一个深入理解网页端加密交互的好案例。


如果你有任何问题或想要获取完整代码github链接:mrisD/wangyiyunhttps://github.com/mrisD/wangyiyun

🚀 Happy Coding!



http://www.hkcw.cn/article/NhBxquLSeH.shtml

相关文章

云台式激光甲烷探测器:守护工业安全的“智慧之眼”

在石油化工、天然气场站、城市燃气管网等场景中,甲烷泄漏的早期监测是保障生产安全的核心防线。云台式激光甲烷探测器凭借高精度、无接触、智能化的技术优势,成为工业安全监测领域的革新者。本文将深度解析其技术原理、核心功能及适用场景,助…

基于YOLO-NAS-Pose的无人机象群姿态估计:群体行为分析的突破

【导读】 应对气候变化对非洲象的生存威胁,本研究创新采用无人机航拍结合AI姿态分析技术,突破传统观测局限。团队在肯尼亚桑布鲁保护区对比测试DeepLabCut与YOLO-NAS-Pose两种模型,首次将后者引入野生动物研究。通过检测象群头部、脊柱等关键…

CppCon 2014 学习:Anatomy of a Smart Pointer

智能指针(smart pointer)可以这样解释: 它是一个指针的容器——内部保存了一个普通指针,并且可以在需要时把指针交给你使用。它支持RAII(资源获取即初始化),也就是说资源(比如内存&…

GNhao,国外云手机号智能选择与应用解析!

GNhao,国外云手机号智能选择与应用解析! 在数字时代,国外云手机号成为跨境沟通的关键。GNhao凭借其稳定的国外云手机号服务,满足了用户多样需求,提升了通讯效率。国外云手机号广泛应用于海外注册、跨境营销和社交&…

AcWing 843:n-皇后问题 ← dfs

【题目来源】 https://www.acwing.com/problem/content/845/ https://www.lanqiao.cn/problems/1508/learning/ https://www.luogu.com.cn/problem/P1219 【题目描述】 n 皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任…

风机巡检方案艰难之路

2025年是“双碳”目标提出后首个五年计划收关节点,政策端通过强化大基地建设与海风开发确保既定风电目标落地。根据《2025年能源工作指导意见》,2025年将通过加速第二批/第三批大基地及海上风电建设保障目标兑现。据联储证券预计,2025年全年陆…

Java-redis实现限时在线秒杀功能

1.使用redisson pom文件添加redisson <!--redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.4</version></dependency> 2.mysql数据库表设…

龙虎榜——20250603

上证指数放量收阳线&#xff0c;阳包阴&#xff0c;量能超过5天均量&#xff0c;个股涨多跌少&#xff0c;行情有所回暖。 深证指数缩量收阳线&#xff0c;再次回打支撑位。 2025年6月3日龙虎榜行业方向分析 1. 医药&#xff08;创新药原料药出口&#xff09; 代表标的&…

永磁同步电机无速度算法--互补滑模观测器

一、原理介绍 采用了互补滑模变结构观测器&#xff0c;滑模面选择了广义滑模面和互补滑模面相结合的设计&#xff0c;这样可以有效地降低系统的跟踪误差&#xff0c;提高系统的跟踪性能&#xff0c;切换控制率选择饱和函数&#xff0c;抑制了传统SMC 的抖振现象。 二、仿真模型…

2025年AIR SCI1区TOP,多策略增强蜣螂算法MDBO+实际工程问题,深度解析+性能实测

目录 1.摘要2.蜣螂优化算法DBO原理3.改进策略4.结果展示5.参考文献6.代码获取7..算法辅导应用定制读者交流 1.摘要 蜣螂优化算法&#xff08;DBO&#xff09;作为一种创新元启发式算法&#xff0c;虽具备良好的数值优化能力&#xff0c;但存在收敛速度慢且易陷入局部最优的问题…

【notepad++】如何设置notepad++背景颜色?

如何设置notepad背景颜色&#xff1f; 设置--语言格式设置 勾选使用全局背景色 例如选择护眼色---80&#xff0c;97&#xff0c;205&#xff1b;

Gitee Wiki:重塑关键领域软件研发的知识管理范式

在数字化转型浪潮席卷全球的当下&#xff0c;关键领域软件研发正面临前所未有的知识管理挑战。传统文档管理模式的局限性日益凸显&#xff0c;知识传承的断层问题愈发严重&#xff0c;团队协作效率的瓶颈亟待突破。Gitee Wiki作为新一代知识管理平台&#xff0c;正在通过技术创…

电源防反接保护电路分析

电路&#xff1a; 这是一个电源输入防反接的电路&#xff0c;通过NMOS来实现。 1、正常接入电源。 正常接入电源的时候&#xff0c;VCC12V&#xff0c;这时候&#xff0c;电流通过R1、R2和NMOS的体二极管D形成一个回路&#xff0c;此时NMOS还未导通。 通过计算可以得到Vs0.7V&a…

焊缝缺陷焊接缺陷识别分割数据集labelme格式5543张4类别

数据集中有超过一半为增强图片&#xff0c;请认真观察图片预览 数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;5543 标注数量(json文件个数)&#xff1a;5543 标注类别数&#xff1a;4…

腾讯云国际版和国内版账户通用吗?一样吗?为什么?

在当今全球化的数字化时代&#xff0c;云计算服务成为众多企业和个人拓展业务、存储数据的重要选择。腾讯云作为国内领先的云服务提供商&#xff0c;其国际版和国内版备受关注。那么&#xff0c;腾讯云国际版和国内版账户是否通用&#xff1f;它们究竟一样吗&#xff1f;背后又…

C++初赛的三讲

C++初赛的三讲 C++初赛第一/二讲链接:CSP-J算法串讲完善程序解题思路1.查找算法顺序查找二分查找二分查找的步骤二分查找法的代码2.排序算法冒泡排序冒泡排序的代码插入排序插入排序的代码选择排序选择排序的代码计数排序C++初赛第一/二讲链接: 1.链接: C++初赛第一讲1.0 2.…

pikachu靶场通关笔记12 XSS关卡08-XSS之htmlspecialchars(四种方法渗透)

目录 一、htmlspecialchars 二、源码分析 1、进入靶场 2、代码审计 3、渗透思路 &#xff08;1&#xff09;利用单引号绕过 &#xff08;2&#xff09;利用协议绕过 三、渗透实战 1、探测是否有过滤 2、注入payload1 3、注入payload2 4、注入payload3 5、注入payl…

Github 2025-06-03Python开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2025-06-03统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目10Rust项目1HTML项目1C项目1 系统设计指南 创建周期&#xff1a;2507 天开发语言&#xff1a;Pyt…

多线程环境中,如果多个线程同时尝试向同一个TCP客户端发送数据,添加同步机制

原代码 public async Task SendToClientAsync(TcpClient targetClient, byte[] data, int offset, int length) {try{// 1. 检查客户端是否有效if (targetClient null || !targetClient.Connected){Console.WriteLine("Cannot send: client is not connected");ret…

java后端生成心电图-jfreechart

用jfreechart生成心电图 先上成功的图片 上代码 1.导入包 implementation org.jfree:jfreechart:1.5.4implementation org.jfree:jcommon:1.0.242.实现代码 对数据进行滤波 转换单位 package com.shinrun.infrastructure.util;import java.util.ArrayList; import java.ut…