nodejs虾米音乐批量下载某个歌手的专辑

本文介绍如何使用Node.js批量下载虾米音乐的歌手专辑。通过fs、cheerio、request和redis等工具,实现输入歌手名字、搜索专辑、获取歌曲ID及真实下载URL的流程。详细讲解了从获取专辑页面到解码歌曲URL的过程,并提供了使用redis的提示。程序还包括下载专辑和图片的功能。可以根据需求扩展到下载指定歌曲、专辑、电台和歌单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用nodejs 批量下载虾米音乐的 方法。
使用到的工具 fs,cheerio,request,redis;

模块 作用
fs 主要完成建立目录和文件的功能
request 用于进行访问url
cheerio 页面解析
redis 使用数据库存储歌手的信息,持久化,也可不要,使用数组,看个人需求。

主要分为以下几个步骤。
1.输入你想要的歌手的名字
2.搜索歌手的专辑
3访问专辑页面
4获取专辑里歌曲id
5获取歌曲id对应的真实下载url。
这里写图片描述
首先1 完成下载某一首歌曲的功能。给定下载的歌名,歌曲id,歌手,下载路径

function download(songname,songid,singer,dir) {
   
   
    var requesturl = getSongUrl(songid);
    if(requesturl){
    request(requesturl, function (req, res, err) {
   
   
            var body;

            if (res) {
                var $ = cheerio.load(res.body, {xmlMode: true});
                var urlstr = $('location').text();
                if(urlstr){
                var songUrl = decodeUrl(urlstr);
                var path = dir+songname.trim().replace('\/','_') + '_' + singer + '.mp3';

                fs.access(path, function (err) {
   
   
                    if (err) {
                        if(songUrl) {
                            console.log("正在下载"+songname);
                            request(songUrl).pipe(fs.createWriteStream(path)).on('end',function(err){
   
   
                               console(err?songname+'下载失败':songname+"下载成功");
                            });
                        }
                    } 
                });
                }else{
                    console.log(songname+'无法下载');
                }
            } 
            else {
                console.log(songname+'没有下载权限');
            }

    })
    }
}

2 完成下载专辑和图片的功能,使用request(url).pipe(stream)即可

function downloadAlbum(picurl,albumurl,albumname,singer){
   
   
    var basedir = './'+singer;
    var dir = basedir+'/'+albumname+'/';
    var picname = albumname+'.jpg';
    fs.access(basedir,function(err){
   
   
        if(err){
            fs.mkdir(basedir,function(err){
   
   
               fs.access(dir,function(err){
   
   
                            if(err){
                                fs.mkdir(dir,function(err){
   
   
                                    downloadCoverAndSongs(picurl,albumurl,dir,singer);
                                })
                            }else{
                               downloadCoverAndSongs(picurl,albumurl,dir,singer);
                            }
                        });
            });
        }else{
              fs.access(dir,function(err){
   
   
                    if(err){
                        fs.mkdir(dir,function(err){
   
   
                           downloadCoverAndSongs(picurl,albumurl,dir,picname,singer);
                        })
                    }else{
                       downloadCoverAndSongs(picurl,albumurl,dir,picname,singer);
                    }
                })
            }
    });


}

function downloadCoverAndSongs(picurl,albumurl,dir,picname,singer){
   
   
            request(picurl).pipe(fs.createWriteStream(dir+picname));
            request(albumurl,function(req,res,err){
   
   

                if(res) {
                    var $ = cheerio.load(res.body, {decodeEntities: false});
                    var songstable = $('#track_list tr[data-needpay]');
                    if(songstable){
                        for(var i in songstable){
                            var song = songstable.eq(i).find('td.song_name a:first-child');
                            if(song.text()){
                                var songid = song.attr('href').slice(6</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值