Python下载网易云歌单歌曲

今天写了个下载脚本,记录一下

效果: 直接上代码:

# 网易云  根据歌单链接下载MP3歌曲
import requests
from bs4 import BeautifulSoup

def main():
    url = "https://music.163.com/#/playlist?id=3136952023" # 歌单地址 请自行更换
    if /#/ in url:
        url = url.replace(/#/, /)
    headers = {
          
   
        Referer: http://music.163.com/,
        Host: music.163.com,
        cookie: 自己去网站拿,获取方式在下边,
        User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36,
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,
    }

    s = requests.session()
    try:
        response = s.get(url, headers=headers).content
        soup = BeautifulSoup(response, lxml)
        lis = list(soup.find(ul))
        fatherlis = [歌单名: + str(soup.find(h2).string)]
        for i in lis:
            sonlis = []
            sonlis.append(str(len(fatherlis)) + .)
            sonlis.append(i.a.string)
            sonlis.append(str(i.a.get(href))[str(i.a.get(href)).find(=) + 1:-1] + str(i.a.get(href))[-1])
            fatherlis.append(sonlis)
    except:
        print("
	歌曲链接输入错误")
        exit(ERROR!)
    format = {0:<10}	{1:{3}<10}	{2:<10}
    print("从{}中找到了{}条歌曲".format(str(soup.find(h2).string), len(fatherlis) - 1))
    print(-------------------------------------------------------------------------------------------------)
    print(序号         歌曲名称       歌曲链接)
    for i in fatherlis:
        if fatherlis.index(i) == 0:
            continue
        else:
            print(
                format.format(i[0], i[1], http://music.163.com/song/media/outer/url?id= + i[2] + .mp3, chr(12288)))
            download_music(i[2],i[1])
    print(##########################下载完成##########################)

# 歌曲下载
def download_music(song_id,song_name):
    file = "./music/" # 保存音乐的文件路径
    wurl = "https://link.hhtjim.com/163/"  # 外链地址
    song_url = wurl + song_id + ".mp3"
    # 获取歌曲16进制编码
    song = requests.get(song_url).content
    # 获取歌曲名称
    # 保存文件
    with open(file + song_name + .mp3, wb) as f:
        f.write(song)
if __name__ == __main__:
    main()

cookie获取方式

  1. 登录网易云web版
  2. 复制粘贴到上方代码中,开始下载就好了
经验分享 程序员 微信小程序 职场和发展