先获得歌手列表,将歌手列表存贮到本地

var request = require('request');
var cheerio = require('cheerio');
var path = require('path');
var fs = require('fs');var out = fs.createWriteStream('./test1.txt');var listUrl=new Array();
var filenames=new Array();var requrl="http://www.kugou.com/yy/singer/index/1-a-1.html";
var headurlbase= 'http://www.kugou.com/yy/singer/index/'
var singerList=new Array()
var page_Num=0;var reqlist=[]for(let i=97;i<123;i++){var headbasestring= String.fromCharCode(i)var headurl = headurlbase+'1-'+headbasestring+'-1.html'//console.log( 'headurl  : ' +headurl );for (let j=1;j<=5;j++){requrl = headurlbase+j+'-'+headbasestring+'-1.html'reqlist.push(requrl);//console.log('curent url is ' + requrl)}for(let k=2; k<12;k++){requrl = headurlbase+'1-'+headbasestring+'-'+k+'.html'reqlist.push(requrl);//console.log('curent url is ' + requrl)}
}
console.log('End....'+reqlist.length);
//for(let i=0; i< reqlist.length;i++){
for(let i=0; i< 390;i++){console.log(' i =  ['+i+']   current get the url :  ---'+reqlist[i])getHtmlPage(reqlist[i])
}function getHtmlPage(url){request(url, function (error, response, body) {if (!error && response.statusCode == 200) {var tmplist =acquireSingerData(body)singerList.push.apply(singerList,tmplist)}console.log('singerList length ====='+singerList.length)console.log(singerList)});
}function acquirePageNum(data){var $ = cheerio.load(data);console.log('start find page ');var pageNum=$('#mypage').find('a').eq(-3).text()   // 通过索引筛选匹配的元素。使用.eq(-i)就从最后一个元素向前数。console.log('mypage :'+pageNum)return pageNum}function acquireSingerData(data) { var tmpsingerlist=[]var $ = cheerio.load(data);//网页内容装入cheerio中之后,查找网页节点元素, 加入'#'和加入’.‘查找的方式不一样//topsingerlist=$('#list_head strong').toArray();  //找到list_head节点下所有strong的节点//前18个歌手信息var topsingerlist=$('#list_head')console.log("singer info is :"+topsingerlist.length);topsingerlist.find('li').each(function(item){var  infos=$(this)let singername=infos.find('strong').find('a').text()let singerurl=infos.find('strong').find('a').attr('href')out.write(singerurl)out.write('\n')console.log('singer name :  ['+singername+']   地址 :'+singerurl)var singerData={singername:singername,singerurl:singerurl};tmpsingerlist.push(singerurl);});//后32个歌手信息var lastsingerlist=$('#list1 a').toArray();console.log("list1 :"+lastsingerlist.length);for(let i = 0; i < lastsingerlist.length;i++ ){let singername=lastsingerlist[i].attribs.title;let singerurl=lastsingerlist[i].attribs.href; console.log('singer name :['+singername+']   地址 :'+singerurl)out.write(singerurl)out.write('\n')var singerData={singername:singername,singerurl:singerurl};tmpsingerlist.push(singerurl);}//console.log(tmpsingerlist)return tmpsingerlist
} 

根据歌手列表下载歌曲(初版代码)


var request = require('request');
var cheerio = require('cheerio');
var path = require('path');
var fs = require('fs');
var requrl="http://www.kugou.com/singer/420.html";  //陈奕迅歌单
var requrl="http://www.kugou.com/yy/singer/home/1574.html";  //林俊杰歌单
//var requrl="http://www.kugou.com/yy/singer/home/192923.html";     //摩登兄弟歌单
var listUrl=new Array();
var filenames=new Array();var  songsFolderNamerequest(requrl, function (error, response, body) {if (!error && response.statusCode == 200) {acquireData(body); }for(let i=0;i<listUrl.length;i++){let time=new Date().getTime();request('http://www.kugou.com/yy/index.php?r=play/getdata&hash='+listUrl[i]+'&album_id=0'+'&_='+time, function (error, response, body) { if (!error && response.statusCode == 200) {acquireMusic(body,i); } }); }});function acquireData(data) { var $ = cheerio.load(data);songsFolderName  = $('.mbx').find('span').text();songsFolderName=songsFolderName+'/'console.log("singer info is :"+songsFolderName);fs.exists(songsFolderName,function(exists){if (exists){console.log("歌手目录["+songsFolderName+"]已经存在,无需创建");}else{fs.mkdir(songsFolderName,function(err){if (err) {return console.error(err);}console.log("歌手目录["+songsFolderName+"]创建成功");});}});var songlist = $('#song_container input').toArray(); //console.log(songlist);for(let i=0;i<songlist.length;i++){ let info=songlist[i].attribs.value; //console.log("info=songlist[i].attribs.value:"+info);let reg=/\|/; let hash=new Array(); //hash=info.split(reg);hash=info.split('|');//console.log("info.split(reg):"+hash);listUrl.push(hash[1]); //console.log("hash[1] : "+hash[1]); //console.log("hash[0] : "+hash[0]); filenames.push(hash[0]); } } function acquireMusic(data,Num){var info=JSON.parse(data);var imgsrc=info.data.play_url; var lyricInfo=info.data.lyrics;//var filename = parseUrlForFileName(imgsrc);var filename=filenames[Num]; console.log("current num is "+Num+"   current song is:"+filename);/*//console.log("current num is "+Num+"current info.data.audio_name is:"+info.data.audio_name);//console.log("current num is "+Num+"current info.data.author_name is:"+info.data.author_name);for (let item in info ){var inter = info[item];console.log(inter);    }*/downloadLyric(lyricInfo,filename,function(){console.log("current num is["+Num+"]  ---- :["+filename+"]'s  lyric has donwload done");});downloadImg(imgsrc,filename,function(){ console.log("current num is ["+Num+"] ----  :["+filename + '] 的歌曲写入本地已经完成 ');}); }function parseUrlForFileName(address) { var filename = path.basename(address); return filename;
}var downloadLyric=function(lyricInfo,filename,callback) {out=fs.createWriteStream(songsFolderName+filename+'.lyc');out.write(lyricInfo);out.end("close",callback);
}var downloadImg = function(uri, filename, callback){request.head(uri, function(err, res, body){ if (err) { console.log('err: '+ err); return false; } //console.log('res: '+ res); console.log('正在位置 : '+ songsFolderName+'写入文件  --------【'+filename+'.mp3】 它的下载地址为:----'+uri); request(uri).pipe(fs.createWriteStream(songsFolderName+filename+'.mp3')).on('close', callback); //调用request的管道来下载到 images文件夹下 });
};

NodeJS 获取酷狗音乐相关推荐

  1. python爬取酷狗音乐top500_python获取酷狗音乐top500的下载地址 MP3格式

    下面先给大家介绍下python获取酷狗音乐top500的下载地址 MP3格式,具体代码如下所示: # -*- coding: utf-8 -*- # @Time : 2018/4/16 # @File ...

  2. Android获取酷狗音乐歌曲详细信息

    Android获取酷狗音乐歌曲详细信息 一.目标 二.实现方案 三.最终方案 四.网易云音乐 五.遗留问题 六.接下来 七.Finally 在<Android获取歌曲详细信息>一文中,介绍 ...

  3. Android获取酷狗音乐歌曲详情

    Android获取酷狗音乐歌曲详情 一.目标 二.失效的实现方式 三.可用的实现方式 四.参考资料 五.写在最后 一.目标 酷狗音乐歌曲详情包括以下信息. 字段 描述 title 标题,即歌曲名称 a ...

  4. 关于OBS无法获取酷狗音乐窗口问题

    解决方法: 1.清空酷狗音乐播放列表 2.重启酷狗音乐(打开后不作任何操作) 3.打开obs获取窗口即可(此时已可以正常显示)

  5. python经典爬虫之获取酷狗音乐TOP500信息

    前几天小菌分享的博客<用python爬虫制作图片下载器(超有趣!)>收到了粉丝们较多的关注,小菌决定再分享一些简单的爬虫项目给爬虫刚入门的小伙伴们,希望大家能在钻研的过程中,感受爬虫的魅力 ...

  6. php 获取酷狗音乐真实地址

    <?php  /**  * 获取列表  * @param  string  $keyword  关键字  * @param  integer $page     当前页  * @param  i ...

  7. Python实战项目2——自动获取酷狗音乐工具

  8. python爬虫:爬取酷狗音乐榜单中的音乐信息并存储到MySQL(附源码)

    目录 具体思路 代码部分 获取歌曲名称和歌手 获取歌曲播放页的url 获取音乐下载地址 将获取到的音乐信息添加到MySQL中 完整代码 获取酷狗音乐榜单中的音乐信息,这里我以"网络红歌榜&q ...

  9. 记一次酷狗音乐API的获取,感兴趣的可以自己封装开发自己的音乐播放器

    1.本教程仅供个人学习用,禁止用于任何的商业和非法用途,如涉及版权问题请联系笔者删除. 2.随笔系作者原创文档,转载请注明文档来源:http://www.cnblogs.com/apresunday/ ...

最新文章

  1. CVPR2021|基于双边扩充和自适应融合方法的点云语义分割网络
  2. WARNING: at net/core/dev.c:1905 skb_warn_bad_offload+0x94/0xb4() 解决思路
  3. CV:计算机视觉基础之图像存储到计算机的原理daiding
  4. Android的Crash崩溃解决方案-Bugly的使用
  5. 服务器主机装普通系统后性能下降,服务器主机性能分析
  6. Python之NumPy(axis=0 与axis=1)区分
  7. python参数报错_python 报错信息汇总
  8. LVS负载均衡DR模式部署
  9. 什么是隐形门? 隐形门安装要注意什么
  10. com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field FileSize
  11. 让SQL2000的查询分析器能够直接编辑SQL2005的视图或存储过程
  12. 微博android4.1.2,微博客户端Fuubo
  13. 在IIS管理器添加网站
  14. 计算机excel数据标签,excel散点图数据标签,Excel如何设置散点图标签
  15. 计算机硬盘图标ico,LaCie 硬盘图标
  16. Python装逼神器,5 行 Python 代码 实现一键批量扣图!
  17. 视觉检测设计与实践答题卡检测实验报告
  18. Duilib 和 DuiDesigner 简介
  19. 查询用户上次登录时间问题
  20. 终于装好titan x显卡驱动

热门文章

  1. CloudOS,一站式云原生开发平台
  2. cartographer:论文阅读(Real-Time Loop Closure in 2D LIDAR SLAM)
  3. 关键词词云怎么做_自媒体人必备!一键搞定高逼格词云图片
  4. 世界顶级杀毒软件排行(Toptennews)
  5. 超全面的Java全套教程分享_动力节点完整版视频教程
  6. IDEA 如何查看 class 文件反编译后的内容
  7. vmware完全卸载 防止出现各种问题治标不治本
  8. OSPF虚电路去区域路由过滤
  9. 情感驿站 | 大学生应该明白的事情
  10. Ubuntu及GL环境安装手册