天天看點

百度音樂(千千音樂)下載下傳歌手所有歌曲

     最近整理硬碟時,發現硬碟上歌曲放在一起,而且有些歌手的音樂不全,到baidu音樂上聽,發現不讓下載下傳,很郁悶,明明可以聽,為什麼不讓下載下傳了?而且即便是通過工具一首一首的聽,一首一首的下載下傳,太慢了,太不爽了。于是,一個邪惡的想法産生了,寫個自動下載下傳的........

      首先分析下網頁,找歌手歌曲,比如我要聽王傑的歌曲,那麼位址:http://music.taihe.com/search/song?s=1&key=%E7%8E%8B%E6%9D%B0&jump=0&start=0&size=20&third_type=0

百度音樂(千千音樂)下載下傳歌手所有歌曲

我們可以看到,有215首歌曲,當然,裡面有很多重複的歌曲。

當我們向下翻頁的時候,位址為:http://music.taihe.com/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分鐘,一百多首歌曲就下下來了,呵呵。

百度音樂(千千音樂)下載下傳歌手所有歌曲