InnerText=InnerHtml - 如何使用 HtmlAgilityPack 提取可读文本

Posted

技术标签:

【中文标题】InnerText=InnerHtml - 如何使用 HtmlAgilityPack 提取可读文本【英文标题】:InnerText=InnerHtml - How to extract readable text with HtmlAgilityPack 【发布时间】:2016-06-15 03:08:03 【问题描述】:

我需要从一个非常糟糕的 html 中提取文本。

我正在尝试使用 vb.netHtmlAgilityPack 来做到这一点

我需要解析的标签有 InnerText = InnerHtml 和两者:

Name:<!--b>&#61;</b--> Albert E<!--span-->instein  s<!--i>&#89;</i-->ection: 3 room: -

在调试时,我可以使用“Html 查看器”阅读它:它显示:

Name: Albert Einstein section: 3 room: -

我怎样才能把它变成一个字符串变量?

编辑:

我使用这段代码来获取节点:

Dim ElePs As HtmlNodeCollection = _
    mWPage.DocumentNode.SelectNodes("//div[@id='div_main']//p")
For Each EleP As HtmlNode In ElePs
    'Here I need to get EleP.InnerText "normalized"
Next

【问题讨论】:

你可以试试这个吗? ***.com/questions/3442394/… 我不知道这是否适用于糟糕的 html...尝试 你需要发布更多我认为的 html - 从表面上看并没有那么糟糕 @Mr.Developer 你能再解释一下吗?我理解逻辑,但我需要更多的帮助来尝试它。提前致谢 我在 stavkover 上尝试了另一个问题...尝试解决方案..如果也可以在错误的 html 上工作 这会删除所有标签...还有坏标签...试试***.com/questions/8692423/… 【参考方案1】:

如果你注意到这个混乱实际上只是 html cmets,它们应该被忽略,所以只需获取文本并使用 string.Join 就足够了:

C#

var text = string.Join("",htmlDoc.DocumentNode.SelectNodes("//text()[normalize-space()]").
                                            Select(t=>t.InnerText));

VB.net

 Dim text = String.Join("", From t In htmlDoc.DocumentNode.SelectNodes("//text()[normalize-space()]")
                                   Select t.InnerText)

html是有效的,没什么不好的,它只是一个没有灵魂的人写的。

根据您的更新,应该这样做:

Dim ElePs As HtmlNodeCollection = mWPage.DocumentNode.SelectNodes("//div[@id='div_main']//p")
For Each EleP As HtmlNode In ElePs
    'Here I need to get EleP.InnerText "normalized"
     Dim text = String.Join("", From t In EleP.SelectNodes(".//text()[normalize-space()]")
                Select t.InnerText).Trim()
Next

注意.//,这意味着它将寻找当前节点的后代节点,而//总是从顶部节点开始。

【讨论】:

感谢您的回答,但我无法使其适应我的代码。我更新了我的问题以显示如何获得提取 InnerText 所需的 Html 元素。您能否根据我的代码调整您的答案?

以上是关于InnerText=InnerHtml - 如何使用 HtmlAgilityPack 提取可读文本的主要内容,如果未能解决你的问题,请参考以下文章

innerHTML和innerText

Javascript中的innerText和InnerHTML

innerHTML和innerText区分

JS中innerHTML 和innerText和value的区别

JavaScript中innerHTML与innerText,createTextNode的区别

innertext与innerhtml