抓取网易云音乐歌手热门歌曲的歌词

1、进入歌手主页,如赵雷

网易云音乐中#一般是假链接,正确的请求地址是http://music.163.com/artist?id=6731

可以在控制台看到json是存放在一个html文件,所以我们需要用到lxml库中的xpath方法查找到歌曲列表的json值

抓取网易云音乐歌手热门歌曲的歌词_第1张图片
获取歌曲接口.png

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

获取歌词接口.png

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")

你可能感兴趣的:(抓取网易云音乐歌手热门歌曲的歌词)