一、环境准备
仅需安装requests库(用于发送网络请求),命令如下:
pip install requests二、核心API详解
获取歌词需分两步:先通过“搜索API”获取歌曲ID,再通过“歌词API”获取原文+翻译歌词,以下是两个接口的完整使用说明、功能及示例。
(一)歌词API(核心,获取原文/翻译歌词)
功能:根据歌曲ID,获取带时间轴的原文歌词或翻译歌词,返回JSON格式数据。
1. 接口地址:https://music.163.com/api/song/lyric
2. 请求方式:GET
3. 必传参数(参数说明及取值):
os:固定取值为pc,用于接口校验,无其他业务影响;
id:歌曲唯一ID(需通过下方“搜索API”获取);
lv:控制返回原文歌词,取值为-1,返回带时间轴的原文歌词;
tv:控制返回翻译歌词,取值为-1,返回带时间轴的翻译歌词。
4. 示例请求:
获取原文歌词(带时间轴):GET https://music.163.com/api/song/lyric?os=pc&id=1900172235&lv=-1
获取翻译歌词(带时间轴):GET https://music.163.com/api/song/lyric?os=pc&id=1900172235&tv=-1
5. JSON返回格式(精简核心内容):
{
"sgc": false,
"sfy": false,
"qfy": false,
"transUser": {
"id": 3954145,
"nickname": "Crazy_Knight"
},
"lyricUser": {
"id": 3954139,
"nickname": "color-9"
},
"lrc": {
"version": 15,
"lyric": "[00:00.617]这个世上没有比假花更美的花\n[00:05.748]因为它完全是由虚假所构成\n 其他歌词省略"
},
"code": 200
}6. 歌词提取示例(Python):
import json
# 假设data是从接口获取的JSON字符串
data = '''{
"lrc": {
"version": 15,
"lyric": "第一行歌词\n第二行歌词\n第三行歌词"
}
}'''
# 解析JSON并提取歌词
obj = json.loads(data)
lyric_text = obj['lrc']['lyric'] # 提取完整带时间轴歌词
lines = lyric_text.split('\n') # 可选:按行拆分歌词,方便查看(二)搜索API(获取歌曲ID)
功能:根据歌曲名称,搜索相关歌曲,返回歌曲ID、歌手等信息,用于后续调用歌词API。
1. 接口地址:https://music.163.com/api/search/get
2. 请求方式:GET
3. 必传参数(参数说明及取值):
type:固定取值为1,表示搜索类型为“歌曲”;
s:需搜索的歌曲名称(可搭配歌手名,如フォニイ;可不,提高匹配度);
limit:返回的歌曲数量,可根据需求设置(如2表示返回前2条匹配结果)。
4. 示例请求:
GET https://music.163.com/api/search/get/?s=フォニイ;可不&type=1&limit=2
5. JSON返回格式(精简核心内容):
{
"result": {
"songs": [
{
"id": 1900172235,
"name": "フォニイ",
"artists": [{"name": "可不"}, {"name": "ツミキ"}]
},
{
"id": 1864969357,
"name": "フォニイ(偽物/phony)(翻自 可不)",
"artists": [{"name": "Yvan叶子"}, {"name": "翼と実TsubasatMi"}]
}
],
"hasMore": true,
"songCount": 10
},
"code": 200
}
6. 歌曲ID提取示例(Python):
import json
data = '''上述JSON字符串'''
obj = json.loads(data)
songs_info = []
for song in obj['result']['songs']:
song_id = song['id']
# 提取歌手名称,处理多歌手情况
artist_names = [artist.get('name', '未知') for artist in song['artists']]
songs_info.append({'id': song_id, 'artists': artist_names})
输出结果
for info in songs_info:
print(f"歌曲ID: {info['id']}, 歌手昵称: {', '.join(info['artists'])}")7. 提取示例输出:
歌曲ID: 1900172235, 歌手昵称: 可不, ツミキ
歌曲ID: 1864969357, 歌手昵称: Yvan叶子, 翼と実TsubasatMi
总结:通过“搜索API获取歌曲ID”→“歌词API获取原文/翻译歌词”,两步即可实现通过歌曲名获取带时间轴的歌词及翻译。
1.搜索API(获取歌曲ID):https://music.163.com/api/search/get,参数:type=1(歌曲)、s=歌名、limit=返回数量
2.歌词API(获取原文/翻译):https://music.163.com/api/song/lyric,参数:os=pc、id=歌曲ID、lv=-1(原文)、tv=-1(翻译)三、完整代码(可直接运行)
import requests
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}
def get_song_id(song_name):
search_url = "https://music.163.com/api/search/get"
params = {"type": 1, "s": song_name, "limit": 1} # 只返回1首匹配歌曲
res = requests.get(search_url, params=params, headers=HEADERS)
return res.json()["result"]["songs"][0]["id"] # 返回第1首歌的ID
def get_lyric(song_id, is_trans=False):
lyric_url = "https://music.163.com/api/song/lyric"
params = {"os": "pc", "id": song_id, "lv": -1, "tv": -1 if is_trans else 0}
res = requests.get(lyric_url, params=params, headers=HEADERS)
return res.json()["lrc"]["lyric"] if res.json()["lrc"]["lyric"] else "暂无歌词"
if __name__ == "__main__":
song_name = input("请输入歌曲名称:")
song_id = get_song_id(song_name)
print("原文歌词:\n", get_lyric(song_id))
print("\n翻译歌词:\n", get_lyric(song_id, is_trans=True))四、使用方法
1.将代码保存为.py文件;
2.终端执行python 文件名.py;
3.输入歌名,即可自动打印原文和翻译歌词。
本文由techcrafts首发!



