2014-04-25 52 views
0

我正在製作WPF中的mp3歌曲獲取器。它所做的是從網頁獲取所有結果。我遇到的問題是,它提取不相關的數據,如標籤,鏈接(不下載)等。我如何從HTML網頁獲取特定數據

我想要的只是獲取結果並從網頁下載鏈接並將其顯示在列表框中。

任何幫助將不勝感激!

從這個鏈接一樣:http://mp3skull.com/mp3/move_that_dope.html

+1

您有什麼*嘗試*?什麼工作?什麼沒有? – Piskvor

+2

試試這個:http://htmlagilitypack.codeplex.com/你可以用這個庫解析主頁一個你需要的內容/鏈接的過濾器 –

+0

@Piskvor不幸的是我沒有試過任何東西因爲我不知道從哪裏開始。 – TheGaMeR123

回答

2

HtmlAgilityPack這樣做很簡單。您只需加載文檔,然後選擇您需要使用簡單的標籤XPath expressions

using HtmlAgilityPack; 
using System; 
using System.Text; 

namespace com.mp3skull.scrapper 
{ 
    class Program 
    { 
     private static void Main(string[] args) 
     { 
      var p = new Program(); 
      HtmlNodeCollection songs = p.GetSongNodesFromPage("http://mp3skull.com/mp3/move_that_dope.html"); 
      p.WriteSongsToConsole(songs); 

      Console.WriteLine("Press any key to continue.."); 
      Console.ReadKey(); 
     } 

     private readonly HtmlWeb web = new HtmlWeb(); 

     private HtmlNodeCollection GetSongNodesFromPage(string pageUri) 
     { 
      HtmlDocument document = web.Load(pageUri); 
      HtmlNode documentNode = document.DocumentNode; 
      return documentNode.SelectNodes("//div[@id='song_html']"); 
     } 

     private void WriteSongsToConsole(HtmlNodeCollection songs) 
     { 
      foreach (HtmlNode s in songs) 
      { 
       HtmlNode titleNode = s.SelectSingleNode(".//b"); // Title is bold 
       string title = titleNode.InnerText; 

       HtmlNode downloadLinkNode = s.SelectSingleNode(".//a[@style='color:green;']"); // Download links is green 
       string downloadLink = downloadLinkNode.Attributes["href"].Value; 

       HtmlNode songInfoNode = s.SelectSingleNode("./div[@class='left']"); 
       string songInfo = GetSongInfoLine(songInfoNode); 

       Console.WriteLine("Title: {0}\t", title); 
       Console.WriteLine("Information: {0}\t", songInfo); 
       Console.WriteLine("Download link: {0}\t", downloadLink); 

       Console.WriteLine(); 
      } 
     } 

     private string GetSongInfoLine(HtmlNode songInfoNode) 
     { 
      var textNodes = songInfoNode.Descendants("#text"); 
      var infoBuilder = new StringBuilder(); 

      foreach (var node in textNodes) 
      { 
       if (infoBuilder.Length > 0) 
       { 
        infoBuilder.Append(", "); 
       } 
       infoBuilder.Append(node.InnerText.Trim()); 
      } 
      return infoBuilder.ToString(); 
     } 
    } 
} 
+0

+1謝謝!從它的外觀來看,它似乎在工作並完成我的需求,但如果它能正常工作,我會讓你知道。再次感謝...!!! – TheGaMeR123

+0

它就像一個魅力,但我也需要提取歌曲信息,如果你知道如何做到這一點,請告訴!! – TheGaMeR123

+1

@ TheGaMeR123,更新。但請嘗試自己嘗試更多。 – rufanov

0

如果你不知道從哪裏開始,那麼學習正則表達式是哪裏去了。

使用正則表達式,您可以將HTML代碼解析到相關標記中,然後執行任何您想做的事情。

這個地方確實是最好的之一,我知道的正則表達式:http://www.regular-expressions.info/

此外,爲了測試正則表達式,有一個極好的工具叫做正則表達式教練,測試學習正則表達式非常有用的: http://www.weitz.de/regex-coach/