【问题标题】:Extracting content from Webpage从网页中提取内容
【发布时间】:2013-08-21 10:58:13
【问题描述】:

我正在尝试使用HTMLagilitypack 从网页中提取所有内容。

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

当我尝试使用上面的代码解析 google.com 时,我得到了很多 javascript。我想要的只是提取网页中的内容,如hp 标签。就像在此页面上提取问题、答案、cmets 并删除其他所有内容一样。

我对 XPath 很陌生,不知道该往哪里走。因此,我们将不胜感激。

【问题讨论】:

  • 好的,我遇到的scriptstyle 的innerText 也被返回了。因此,删除脚本和样式是必要的,所有的功劳都归于这个人 link
  • 我不熟悉 HTMLagilitypack,但从 text() 节点获取 Text 对我来说听起来很奇怪。您可以尝试 SelectNodes("//*[text()]") 来获取所有具有文本节点的节点。

标签: c# .net xpath html-parsing html-agility-pack


【解决方案1】:

您可以按名称过滤不需要的标签并将它们从文档中删除。

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

【讨论】:

  • 这就是我不想只选择 h1 标签的事情。相反,我想从整个页面中选择文本。我认为我无法涵盖用于文本文本提取的所有可能的标签组合。
【解决方案2】:

您可以使用这个 XPath 表达式:

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

它只取body 内的元素并跳过script 元素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多