2011-11-14 87 views
2

我想從C#中的網頁中獲取文本。
我不想獲取HTML,我想要關閉網頁上的真實文本。就像我輸入「<b>cake</b>」一樣,我想要蛋糕,而不是標籤。如何從網頁中刪除文字?

+0

簽入HTML解析器,如HTML Agility Pack - 然後遞歸循環DOM並從每個元素中提取文本。 –

+0

看看http://htmlagilitypack.codeplex.com/ – John

回答

4

使用HTML Agility Pack庫。

這對於解析HTML非常精細庫,爲您的要求使用此代碼:

HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb(); 
    HtmlAgilityPack.HtmlDocument doc = web.Load("Yor Path(local,web)"); 
    var result=doc.DocumentNode.SelectNodes("//body//text()");//return HtmlCollectionNode 
    foreach(var node in result) 
    { 
     string AchivedText=node.InnerText;//Your desire text 
    } 
+0

這是一個非常好的答案!謝謝。 –

1

您可以去除使用正則表達式標記,如這一個(一個簡單的例子):

// You can import System.Text.RegularExpressions for convenience, of course. 
System.Text.RegularExpressions.Regex tag = new System.Text.RegularExpressions.Regex("\<.+?\>"); 
myHTML = tag.Replace(myHTML, String.Empty); 

但如果您需要檢索大量結構良好的數據,那麼你可能會更好關閉使用HTML庫。 (如果網頁是XHTML,那就更好了 - 使用System.Xml類。)

http://htmlagilitypack.codeplex.com/,例如。
如果您嘗試從JavaScript中獲取數據,或者數據位於元素的屬性中幷包含尖括號,則可能會產生意想不到的副作用。您還需要接受轉義序列,如&amp;

+0

我不認爲RegEx會很好地工作。 HTML中的尖括號不是標籤的一部分,它們也可以出現在CSS,Javascript字符串常量等中。真正實現這一點的唯一方法是使用HTML解析器。 –

+0

@MikeChristensen:這就是爲什麼我要說a)「一個簡單的例子」和b)「大量」。如果OP只需要一點點,那麼就不需要在項目中包含一個完整的解析器。此外,JavaScript不經常包含在數據解析中,CSS絕對不是...... – Ryan

+0

是的,我想這就是你的意思 - 我只是想更明確地指出它。 –

1

這要看情況。 如果您的應用程序使用WebBrowser組件下載網頁,那麼該組件將在後臺自動爲您進行解析(就像Internet Explorer一樣)。只需走DOM樹並提取您想要的文本。您會發現HtmlElement.InnerText property尤其有用:)