前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >升级+优化的歌单下载器

升级+优化的歌单下载器

作者头像
NikoDos
发布2022-03-29 16:32:30
2420
发布2022-03-29 16:32:30
举报
文章被收录于专栏:Niko的小窝Niko的小窝

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

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

代码语言:javascript
复制
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!')

还有进度条版的:

代码语言:javascript
复制
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)

效果:

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

TO DO LIST:

将文件命名为歌曲名

加入歌曲下载

实现GUI

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档