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

      首先分析下网页,找歌手歌曲,比如我要听王杰的歌曲,那么地址

千千音乐爬取python 千千音乐歌曲下载位置_Web

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

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

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

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

千千音乐爬取python 千千音乐歌曲下载位置_自动下载_02

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

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

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

然后分析网页的源码:

千千音乐爬取python 千千音乐歌曲下载位置_Web_03

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

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

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

继续看里面的代码

千千音乐爬取python 千千音乐歌曲下载位置_自动下载_04

返现歌曲的名称很容易得到,另外,那个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就靠它了。

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

很容易找到歌曲的信息

千千音乐爬取python 千千音乐歌曲下载位置_网页内容_05

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

用webclient下载即可

WebClient client = new WebClient();
client.DownloadFile(url, filename);

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

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

千千音乐爬取python 千千音乐歌曲下载位置_自动下载_06