美文网首页
抓取网易云音乐歌手热门歌曲的歌词

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

作者: 木沐__ | 来源:发表于2017-06-07 15:38 被阅读0次

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

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

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

    获取歌曲接口.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")
    

    相关文章

      网友评论

          本文标题:抓取网易云音乐歌手热门歌曲的歌词

          本文链接:https://www.haomeiwen.com/subject/ryzofxtx.html