2013-08-21 94 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元素