发布于 

升级+优化的网易云歌单下载器

Updated at 22/11/12

啊,半年过去了,我也上中学了,过的好快啊。
想起这个项目,自己的听歌风格也很多变,是时候更新歌单了,也顺便改了改程序。
代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import requests
import json
import jsonpath
import os
from tqdm import tqdm


choose = int(input("1.歌单 2.歌曲 >> "))
if choose == 1:

playlist_url = input('请输入歌单网址: >>>')
playlist_id = int(playlist_url.strip().split('=')[1].split('&')[0])

myjson = requests.get(
'https://api.injahow.cn/meting/?type=playlist&id={}'.format(playlist_id)
)
data = json.loads(myjson.text)

urls = []
names = []
for i in data:
url = jsonpath.jsonpath(i, '$..url')
urls.append(url[0])

names.append(jsonpath.jsonpath(i, '$..name')[0].replace('/s*/g', ""))
# https://api.injahow.cn/meting/?server=netease&type=url&id=1344088470
print('总共有{}个链接,开始下载……\n'.format(len(urls)))

dir_name = input("自行命名文件夹名(不填即为歌单ID):")
if dir_name == '':
dir_name = playlist_id
os.makedirs('.\\dmusic\\playlist\\{}\\'.format(dir_name), exist_ok=True)

for url in tqdm(urls, desc='下载中'):

with requests.get(url) as resp:
with open(
'.\\dmusic\\playlist\\{}\\'.format(dir_name) + str(names[0]) + '.mp3',
mode='wb',
) as f:
f.write(resp.content)
names.pop(0)
print(f'下载成功,请在 .\\dmusic\\playlist\\{dir_name} 文件夹中查看您的音乐')

elif choose == 2:
song_url = input('请输入歌曲网址 (q退出): >>>')
song_id = int(song_url.strip().split('=')[1].split('&')[0])
while song_url != 'q':

myjson = requests.get(
'https://api.injahow.cn/meting/?type=song&id={}'.format(song_id)
)
data = json.loads(myjson.text)
song_name = jsonpath.jsonpath(data[0], '$..name')[0].replace('/s*/g', "")
os.makedirs('.\\dmusic\\song\\', exist_ok=True)

with requests.get(url=jsonpath.jsonpath(data, '$..url')[0]) as resp:
with open(
'.\\dmusic\\song\\' + str(song_name) + '.mp3',
mode='wb',
) as f:
f.write(resp.content)
print(str(song_name) + "下载成功")
song_url = input('请输入歌曲网址 (q退出): >>>')

算是大更新吧,攻克一道难关。也许这是最后的版本了。
云盘下载地址: https://pan.nikoblog.top/api/raw/?path=/音乐歌单/下载音乐.exe

TO DO LIST:

  • 将文件命名为歌曲名
  • 输入网址时后的user-id混淆导致出错 已修复
  • 自定义歌单文件夹名
  • 加入歌曲下载 已改进
  • 实现GUI

Updated at 22/06/18

今天新的读卡器到了,给音响里加几首歌,急需歌曲单首下载,加了点功能。
请在下面代码查看,没有普通版本(懒得一批)
主要是更新了单曲连续下载,只要不按q键就不会停止询问下载。
其次,整理了一下歌曲下载的文件夹。
618快乐!

嘿,大家好,今天复习了一下爬虫知识,自己想爬个网易云的歌单下来,备着以后禁网的时候听。但由于我懒癌晚期,懒得直接上浏览器上搜,搜着,发现没有一个合格的。
为什么?其实是因为那些爬虫是打开浏览器(即Selenium)、打开歌单的网址、把其中的歌曲名和链接拿下、依次用外链下载。
这个方法不好,原因是在网页版的网易云的无登陆状态是只能在歌单里看到十首歌,无法看全。就好比我歌单里有50首歌,而你的爬虫只能爬10首下来,没效果。

没办法,只能自己写了。就是套了个api嘛。源码如下。

只有进度条版本的。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import requests
import json
import jsonpath
import os
from tqdm import tqdm


choose = int(input("1.歌单 2.歌曲"))
if choose == 1:

playlist_url = input('请输入歌单网址: >>>')
playlist_id = int(playlist_url.strip().split('=')[-1])

myjson = requests.get(
'https://api.injahow.cn/meting/?type=playlist&id={}'.format(playlist_id)
)
data = json.loads(myjson.text)

urls = []
for i in data:
url = jsonpath.jsonpath(i, '$..url')

urls.append(url[0])

# https://api.injahow.cn/meting/?server=netease&type=url&id=1344088470
print('总共有{}个链接,开始下载……\n'.format(len(urls)))

os.makedirs('.\\dmusic\\playlist\\{}\\'.format(playlist_id),exist_ok=True)

for url in tqdm(urls, desc='下载中'):
song_id = url.strip().split('=')[-1]
with requests.get(url) as resp:
with open(
'.\\dmusic\\playlist\\{}\\'.format(playlist_id) + str(song_id) + '.mp3',
mode='wb',
) as f:
f.write(resp.content)

elif choose == 2:
song_url = input('请输入歌曲网址 (q退出): >>>')
while song_url != 'q':
song_id = int(song_url.strip().split('=')[-1])
myjson = requests.get(
'https://api.injahow.cn/meting/?type=song&id={}'.format(song_id)
)
data = json.loads(myjson.text)

os.makedirs('.\\dmusic\\song\\',exist_ok=True)

with requests.get(url=jsonpath.jsonpath(data, '$..url')[0]) as resp:
with open(
'.\\dmusic\\song\\' + str(song_id) + '.mp3',
mode='wb',
) as f:
f.write(resp.content)
print(str(song_id) + "下载成功")
song_url = input('请输入歌曲网址 (q退出): >>>')

效果:

如果看到那些用ID命名的歌曲不惯呢,可以打开网易云音乐桌面版 –> 打开本地音乐 –> 选择目录 –> 把缓存糖果屋添加进去 –> 添加完后,点击匹配音乐 –> ALL DONE!