最近整理硬盘时,发现硬盘上歌曲放在一起,而且有些歌手的音乐不全,到baidu音乐上听,发现不让下载,很郁闷,明明可以听,为什么不让下载了?而且即便是通过工具一首一首的听,一首一首的下载,太慢了,太不爽了。于是,一个邪恶的想法产生了,写个自动下载的........
首先分析下网页,找歌手歌曲,比如我要听王杰的歌曲,那么地址
我们可以看到,有215首歌曲,当然,里面有很多重复的歌曲。
有了网页,下一步就是分析出网页中歌曲的信息
主要是分析网页内容,那就用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分钟,一百多首歌曲就下下来了,呵呵。