前言
前几天,我做了b站视频的下载,有好兄弟表示,只下载视频,不能够让人满足,我还希望能够下载网易云的音乐。
上一次在我发布的b站视频下载中,使用了you-get
库作为下载方式,但是实际上,这个库也可以下载网易云音乐,因此,我们只需要参考我们上次的b站视频下载,简单的进行一下修改,就可以完成音乐的下载了。
为了能够更加方便的批量下载音乐,这里采用了“按艺术家“的下载方式,除了默认提供的以外,你也可以将你喜欢的歌手的id放入其中,即可轻松完成下载。当然,并非所有音乐都是可以下载的,只有原本在网易云音乐的网站上可以播放的音乐,才是可以下载的,如果原本就不可以播放,是“灰色的”,那么我们的程序也是无法完成下载的。
代码实现
import requests
import subprocess
from parsel import Selector
def yun_music_download(song_url, song_name):
command = [
"you-get",
"-o", "./music",
"-O", song_name,
"--no-caption",
song_url
]
subprocess.run(command, capture_output=True, text=True, encoding='utf-8')
return song_name
def yun_artists_playlist_download(artist_id):
url = f"https://music.163.com/artist?id={artist_id}"
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
r = requests.get(url, headers=headers)
s = Selector(r.text)
for li in s.xpath("//ul[@class='f-hide']/li"):
song_url = "https://music.163.com" + li.xpath("./a/@href").get()
song_name = li.xpath("./a/text()").get()
yun_music_download(song_url, song_name)
def yun_artists_choose():
artists = [('林俊杰', 3684), ('陈奕迅', 2116), ('汪苏泷', 5538), ('薛之谦', 5781), ('郑润泽', 29051613), ('G.E.M.邓紫棋', 7763), ('方大同', 2738), ('周传雄', 6652), ('颜人中', 31376161), ('陶喆', 5196), ('h3R3', 12631485), ('Dave', 47197216), ('张杰', 6472), ('单依纯', 29802127), ('毛不易', 12138269), ('李荣浩', 4292), ('DJ阿智', 58149097), ('Taylor Swift', 44266), ('张碧晨', 1024308), ('周杰伦', 6452), ('罗言', 33863232), ('赵雷', 6731), ('蔡健雅', 7214), ('王贰浪', 14312549), ('许嵩', 5771), ('阿冗', 30116848), ('宝石Gem', 12084497), ('队长', 1143033), ('Justin Bieber', 35531), ('王赫野', 47091532), ('徐佳莹', 9940), ('张韶涵', 10562), ('周深', 1030001), ('宝宝巴士', 14714082), ('刘大拿', 29588305), ('Zy', 37123911), ('马思唯', 1132392), ('初音ミク', 159692), ('王力宏', 5346), ('蔡依林', 7219), ('梁静茹', 8325), ('Beyond', 11127), ('五月天', 13193), ('孙燕姿', 9272), ('法老', 865007), ('王菲', 9621), ('郭顶', 2843), ('曾舜晞', 12008056), ('海洋Bo', 36985903), ('JORDANN', 338718), ('陈楚生', 2124), ('杨宗纬', 6066), ('Aioz', 29235210), ('容祖儿', 9269), ('CashMoon', 34516758), ('王宇宙Leto', 49144727), ('余佳运', 1079074), ('邵帅', 29392693), ('就是南方凯', 46360442), ('DJ阿布', 58160751), ('The Weeknd', 185858), ('告五人', 12676697), ('黄丽玲', 7063), ('杜宣达', 12060040), ('张学友', 6460), ('莫文蔚', 8926), ('Wiz_H张子豪', 13112601), ('Capper', 12193174), ('陈粒', 1007170), ('kkluv', 28642672), ('陈绮贞', 7217), ('傲七爷', 13145036), ('HOYO-MiX', 12487174), ('姚晓棠', 33709222), ('BIGBANG', 126339), ('en', 32220939), ('小瑞', 47058186), ('华晨宇', 861777), ('DJ铁柱', 53212744), ('胡彦斌', 3066), ('那奇沃夫', 12570417), ('刘思达LOFTHESTAR', 12030367), ('鹿晗', 1038093), ('韦礼安', 5379), ('王云宏', 34624664), ('阿YueYue', 12227865), ('曲婉婷', 9178), ('杨丞琳', 10199), ('贝乐虎', 30109388), ('买辣椒也用券', 12085562), ('国风堂', 31862479), ('凤凰传奇', 11564), ('沈以诚', 12002248), ('张叶蕾', 12213291), ('任然', 9255), ('梨冻紧', 33259235), ('王以太', 12236125), ('梁博', 166010), ('HOPERUI', 33954709), ('人工智能小霸王', 59638593)]
for i in range(len(artists)):
print(i + 1, artists[i][0])
u = int(input("请选择你要下载的内容,或自行提供歌手id:"))
if 0 <= u - 1 < len(artists):
yun_artists_playlist_download(artists[u - 1][1])
else:
yun_artists_playlist_download(u)
yun_artists_choose()
使用说明
寻找歌手id:
首先,从页面https://music.163.com/discover/artist,选择一位歌手。
点进去以后,比如说找到https://music.163.com/#/artist?id=12675330,那么这里的12675330就是歌手id
写入到artists
中,artists = [('歌手', 歌手id),('歌手', 歌手id),('歌手', 歌手id),('歌手', 歌手id)]
or直接输入你想下载的歌手id
下载到的文件会保存在./music
,也就是当前代码文件运行目录下的music文件夹里。
注意:本方法下载音乐仅供学习交流,任何下载应当在24小时内删除,避免侵权。