最近整理硬碟時,發現硬碟上歌曲放在一起,而且有些歌手的音樂不全,到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分鐘,一百多首歌曲就下下來了,呵呵。