使用 Html Agility Pack 从 HTML BODY 节点中提取内部文本

Posted

技术标签:

【中文标题】使用 Html Agility Pack 从 HTML BODY 节点中提取内部文本【英文标题】:Extracting Inner text from HTML BODY node with Html Agility Pack 【发布时间】:2011-10-14 16:40:49 【问题描述】:

html Agility Pack 方面需要一些帮助!

基本上我想用 HTML 的 body 节点抓取 plain-text。 到目前为止,我已经在 vb.net 中尝试过,但它无法返回内部文本含义 没有看到任何变化,至少从我所看到的来看。

Dim htmldoc As HtmlDocument = New HtmlDocument
htmldoc.LoadHtml(html)

Dim paragraph As HtmlNodeCollection = htmldoc.DocumentNode.SelectNodes("//body")

If Not htmldoc Is Nothing Then
   For Each node In paragraph
       node.ParentNode.RemoveChild(node, True)
   Next
End If

Return htmldoc.DocumentNode.WriteContentTo

我试过这个:

Return htmldoc.DocumentNode.InnerText

但还是没有运气!

有什么建议吗???

【问题讨论】:

Grab all text from html with Html Agility Pack 的可能重复项 【参考方案1】:

怎么样:

Return htmldoc.DocumentNode.SelectSingleNode("//body").InnerText

【讨论】:

嗨,Jeff,我之前也尝试过,但是返回的数据包含很多不需要的字符,例如 &、、 以及大量的 html 标记和脚本标记。行距就在窗外:) 也许我可以使用正则表达式来解决这个问题。但我想更专注于 Html Agility Pack 除了清除不受欢迎的 html 之外,您对此无能为力。 InnerText 包括您在文档中看到的不属于该元素的所有内容。这包括空格、脚本节点中的代码等。如果您的目标是让文本看起来像在 Web 浏览器中呈现的那样,那么您不会以这种方式获得它。 嗯,我明白你的意思。也许我对内部文本和明文感到困惑。主要目的是取回干净的文本或解析的 HTML,其中包含主要文本内容。请告诉我如何解决这个问题。 说实话,我真的不知道。我要做的是在浏览器中加载它并从屏幕(不是源)获取文本。以编程方式执行此操作完全不同。 其实我的意思是一个真正的浏览器(IE、FF、Chrome 等)。虽然我认为WebBrowser 控件可以帮助您解决这个问题,但我不知道该怎么做。【参考方案2】:

如果您没有表格,Jeff 的解决方案还可以,因为表格中的文本会像 cell1cell2cell3 一样粘在一起。 为防止出现此问题,请使用以下代码(C# 示例):

var words = doc.DocumentNode?.SelectNodes("//body//text()")?.Select(x => x.InnerText);
return words != null ? string.Join(" ", words) : String.Empty;

【讨论】:

以上是关于使用 Html Agility Pack 从 HTML BODY 节点中提取内部文本的主要内容,如果未能解决你的问题,请参考以下文章

Html Agility Pack 与 302 重定向到同一页面

使用 HTML Agility Pack 替换 HTML div InnerText 标签

如何使用 Html Agility Pack 使请求超时

Html Agility Pack:查找评论节点

如何使用 HTML Agility Pack 修复格式错误的 HTML?

csharp Html Agility Pack #CSharp #HtmlParsing