2013-08-21 92 views
0

我正在嘗試使用HTMLagilitypack從網頁中提取所有內容。從網頁中提取內容

foreach (HtmlTextNode node in doc.DocumentNode.SelectNodes("//text()")) 
{ 
    sb.AppendLine(node.Text); 
} 

當我嘗試使用上述代碼解析google.com時,我收到了很多javascript。我想要的只是提取網頁中的內容,如hp標籤。就像回答這個問題一樣,在這個頁面上回答評論,並刪除其他所有內容。

我對XPath真的很陌生,不知道該往哪裏前進。所以任何幫助,將不勝感激。

+0

好了,所以這個問題我是有那個'script'的的innerText和'風格'也被退回。所以對於刪除腳本和樣式是必要的所有功勞都歸功於這個人[鏈接](http://stackoverflow.com/a/2785108/1762761) –

+0

我不熟悉HTMLagilitypack但聽起來很奇怪,我得到一個來自** text()**節點的**文本**。您可以嘗試** SelectNodes(「// * [text()]」)**以獲得具有文本節點的所有節點。 – jvverde

回答

0

您可以按名稱過濾不需要的標籤,並將其從文檔中刪除。

 doc = page.Load("http://www.google.com"); 
     doc.DocumentNode.Descendants().Where(n => n.Name == "script" || n.Name == "style").ToList().ForEach(n => n.Remove()); 
+0

這就是我不想只選擇h1標籤的事情。相反,我想從整個頁面中選擇文本。我不認爲我能夠涵蓋用於文本文本提取的每個可以想到的標籤組合。 –

+0

更新了我的答案! –

0

您可以使用此XPath表達式:

//body//*[local-name() != 'script']/text() 

只需在body裏面的元素,並跳過script元素