admin管理员组

文章数量:1530285

     最近整理硬盘时,发现硬盘上歌曲放在一起,而且有些歌手的音乐不全,到baidu音乐上听,发现不让下载,很郁闷,明明可以听,为什么不让下载了?而且即便是通过工具一首一首的听,一首一首的下载,太慢了,太不爽了。于是,一个邪恶的想法产生了,写个自动下载的........

      首先分析下网页,找歌手歌曲,比如我要听王杰的歌曲,那么地址:http://music.taihe/search/song?s=1&key=%E7%8E%8B%E6%9D%B0&jump=0&start=0&size=20&third_type=0

我们可以看到,有215首歌曲,当然,里面有很多重复的歌曲。

当我们向下翻页的时候,地址为:http://music.taihe/search/song?s=1&key=%E7%8E%8B%E6%9D%B0&start=20&size=20&third_type=0

很容易就看出来了,start是歌曲开始的序号,size是每页显示的歌曲数目key是歌手

有了网页,下一步就是分析出网页中歌曲的信息 

主要是分析网页内容,那就用HtmlAgility,这个比较方便,速度也快。

在nuget里面搜索,然后安装即可。

后面我们还会分析json数据,所以,吧Newtonsoft也安装了。

通过HtmlWeb的load,就可以加载网页信息

var web = new HtmlWeb();var doc = web.Load(url);

然后分析网页的源码:

那么我们就很容易写出过滤语句了

 HtmlNode node = doc.GetElementbyId("result_container");
 HtmlNodeCollection songs = node.SelectNodes("//div[@class='song-item clearfix ']");

这样就得到歌曲的集合了,下面要分析出歌曲的名称

继续看里面的代码

返现歌曲的名称很容易得到,另外,那个id也很重要,后面下载歌曲会用到,

所以建议写个类Song

public class Song
    {
        public string Name { get; set; }
        public string Singer { get; set; }
        public int Hot { get; set; }
        public int Download { get; set; }
        public string SongId { get; set; }

        public string SongLink { get; set; }
    }

将相关值放到里面。那个id就是SongId,后面得到歌曲SongLink就靠它了。

有了歌曲基本信息,下一步就是要得到歌曲的下载信息,在原网页点击播放,

很容易找到歌曲的信息

然后解析出来就可以下载了,

用webclient下载即可

WebClient client = new WebClient();

client.DownloadFile(url, filename);

里面有些地方就不好讲太明白了,比如说,获取歌曲信息,需要吧登录的cookie带上等。

因为获取到了歌曲信息集,就可以用Parallel的并行处理 ,速度非常快,1,2分钟,一百多首歌曲就下下来了,呵呵。

 

            

本文标签: 音乐所有歌曲歌手