1、进入歌手主页,如赵雷
网易云音乐中#一般是假链接,正确的请求地址是http://music.163.com/artist?id=6731
可以在控制台看到json是存放在一个html文件,所以我们需要用到lxml
库中的xpath
方法查找到歌曲列表的json值
2、进入某首歌曲详情页面,如成都
查看网页控制台,如图可以看到歌词的请求地址,但是这个地址没有id参数,所以不知道如何使用,我就从网上找了一个获取歌词的API是 http://music.163.com/api/song/lyric?os=pc&id=93920&lv=-1&kv=-1&tv=-1
很详细的网易云音乐API汇总 http://moonlib.com/606.html
3、为了将获取的歌词保存到本地,写一个保存文件的方法
代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
from lxml import html
import json
import codecs
import re
# 获取歌手的热门歌曲
def getHotSong(artistId):
url = 'http://music.163.com/artist?id=' + str(artistId)
r = requests.get(url)
tree = html.fromstring(r.text)
data_json = tree.xpath('//textarea[@style="display:none;"]')[0].text # 通过xpath在xml文档中找到存放歌曲id的json
jsob = json.loads(data_json)
return jsob
# 获取歌曲的歌词
def getSongLyric(songID):
url = 'http://music.163.com/api/song/lyric?os=pc&id='+str(songID)+'&lv=-1&kv=-1&tv=-1'
r = requests.post(url)
data = r.text
songLyric = json.loads(data)
return songLyric
# 保存歌词
def save_to_file(content, filename):
f = codecs.open(filename, 'w', encoding='utf-8')
f.writelines(content)
songs = getHotSong(6731) # 获取歌手的50热门歌曲
for song in songs: # 循环歌曲列表获取歌词
name = song["name"]
id = song["id"]
songLyric = getSongLyric(id)
lyric = songLyric["lrc"]["lyric"]
lrc = re.sub(r"\[(.*)\]", '', lyric) # 正则匹配去掉歌词中带的时间
# print lrc
filename = name
save_to_file(lrc, "D:\\test\\" + filename + ".txt")