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

嘿,我就是死磕网易云不放,今天就来扒网易云的歌单!

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

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

{% codeblock lang:python %} import requests import json import jsonpath import os

playlist_id = input(‘请输入歌单id: »>') 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’) name = jsonpath.jsonpath(i, ‘$..name’)

names.append(name[0])
urls.append(url[0])

https://api.injahow.cn/meting/?server=netease&type=url&id=1344088470

print(‘总共有{}个链接,开始下载……\n’.format(len(urls)))

if not os.path.exists(’.\缓存糖果屋\{}\'.format(playlist_id)): os.mkdir(’.\缓存糖果屋\{}\'.format(playlist_id))

num = 0 name_count = 0 for url in urls:

id = url.split('&')[2].split('&')[0].split('=')[1]
with requests.get(url) as resp:
    with open(
        '.\\缓存糖果屋\\{}\\'.format(playlist_id) + id + '.mp3',
        mode='wb',
    ) as f:
        f.write(resp.content)
        num += 1
        print('完成{}个,即为'.format(num) + names[name_count])
        name_count += 1

print('\nALL DONE!')

{% endcodeblock %}

还有进度条版的: {% codeblock lang:python %} import requests import json import jsonpath import os from tqdm import tqdm

playlist_id = input(‘请输入歌单id: »>') 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’) name = jsonpath.jsonpath(i, ‘$..name’)

names.append(name[0])
urls.append(url[0])

https://api.injahow.cn/meting/?server=netease&type=url&id=1344088470

print(‘总共有{}个链接,开始下载……\n’.format(len(urls)))

if not os.path.exists(’.\缓存糖果屋\{}\'.format(playlist_id)): os.mkdir(’.\缓存糖果屋\{}\'.format(playlist_id))

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

id = url.split('&')[2].split('&')[0].split('=')[1]
with requests.get(url) as resp:
    with open(
        '.\\缓存糖果屋\\{}\\'.format(playlist_id) + id + '.mp3',
        mode='wb',
    ) as f:
        f.write(resp.content)

{% endcodeblock %}

效果:

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

TO DO LIST:

{% checkbox red,将文件命名为歌曲名 %} {% checkbox blue,加入歌曲下载 %} {% checkbox yellow, 实现GUI %}

comments powered by Disqus
祝你每天开心哦!😙
Built with Hugo
Theme Stack designed by Jimmy