Python下载网易云音乐

Python下载网易云音乐

该项目已有升级版,持续维护中,欢迎fork&star:项目地址
程序包括两部分:爬取歌曲ID和下载歌曲
该程序主要使用了BeautifySoup库和requests库(在编写爬取歌曲ID部分的时候一定要记住在requests.get函数中添加allow_redirects=False,否则爬取到的结果将不会含有ID信息)

代码如下:

from urllib import request
import requests
from bs4 import BeautifulSoup
import urllib
import time

def directions():
	'''启动时的介绍'''
    print("\n===============欢迎使用 Yunmusic Download ================")
    print("**该软件可以下载网易云的音乐\n(包括付费下载曲目和免费曲目,但不包括已下架曲目和试听曲目)")
    print("使用方法:\n","在浏览器中打开歌单,复制歌单最后的一串数字\n","将该串数字粘贴到以下输入框中\n")
def get_content(url):
    response= requests.session()
    response= BeautifulSoup(response.get(url, headers=headers).content, "html.parser")
    return response

def save(response):
    '''以字典方式获取ID和歌名'''
    music_dict = {}
    result = response.find('ul', {'class': 'f-hide'}).find_all('a')
    for music in result:
        music_dict[music['href'].strip("/song?id=")] = music.text

    return music_dict

def down(ID,music_dict):
	'''下载音乐模块'''
    url='https://music.163.com/song/media/outer/url?id='
    req=requests.get(url+ID,headers=headers,allow_redirects=False)
    music_link=req.headers['Location']
    urllib.request.urlretrieve(music_link,music_dict[ID]+".mp3")

def down_load(music_dict):
    while True:
        ID=input("请输入音乐ID(输入q可以退出哦!):")
        if ID=="q":
            break
        elif ID=="ALL":
            for key,value in music_dict.items():
                try:
                    down(key,music_dict)
                    time.sleep(1.1)
                except FileNotFoundError:
                    print(music_dict[key],"下载失败!")
                    continue
            print("全部下载完毕!")
        else:
            try:
                down(ID,music_dict)
                print(music_dict[key],"下载完毕!")
            except KeyError:
                print("没有这个ID哦,请检查后再次尝试!")

if __name__=="__main__":
    directions()
    list_id=input("请输入歌单ID:")
    
    url="https://music.163.com/playlist?id="+list_id
    
    headers = {
    'Host': 'music.163.com',
    'Referer': 'https://music.163.com/',
    'User-Agent': '这里请输入自己的浏览器标识!!!'
    }
    
    response=get_content(url)
    for ID,name in save(response).items():
    	#打印音乐信息
        print("歌曲ID:",ID,"\t歌曲名字:",name)
    down_load(save(response))

你可能感兴趣的:(python,python,爬虫,网易云)