将网页转换为纯文本..?

Posted

技术标签:

【中文标题】将网页转换为纯文本..?【英文标题】:Convert webpage into plain text..? 【发布时间】:2011-10-01 08:51:44 【问题描述】:

我正在尝试将网页转换为纯文本。但是,如果我遇到表格,我也会得到 td 和 tr 标签。如果我替换那些表格标签,那么我将无法获取某些内容。

这是我的代码

string s = Regex.Replace(htmldoc, "<script.*?</script>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<!--.*?-->", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<style.*?style>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<a.*?a>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<img.*?img>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<table.*?table>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
s = doc.DocumentNode.SelectSingleNode("//body").InnerText.Trim();

请检查一下并告诉我如何在不获取 td 和 tr 标签的情况下从表中获取内容。

【问题讨论】:

我会强制警告使用regex to parse XML/HTML 是不明智的。您的问题很好地说明了这一点,HTML 表格标签的树形结构使其难以在正则表达式中处理。 可能重复:***.com/questions/731649/… 【参考方案1】:

如果您使用 HTML Agility 包来解析表格,则无需使用正则表达式删除 HTML 标记。 SO上有一些使用HTML Agility包解析表格的好例子。例如:HTML Agility pack - parsing tables

【讨论】:

【参考方案2】:

可以使用正文的InnerText

string html = @"
<html>
    <title>title</title>
    <body>
           <h1> The wheel.</h1>
           Stop reinventing the wheel ! Use powerful APIs 
           for manipulating html docs !
           <h3> I am fine </h3>
           <img src=""da_wheel_in_my_mind.png""/>
    </body>
</html>";

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
string text = doc.DocumentNode.SelectSingleNode("//body").InnerText;

接下来,您可能想要折叠空格和换行:

text = Regex.Replace(text, @"\s+", " ").Trim();

但是请注意,虽然它在这种情况下工作,但 hello&lt;br&gt;worldhello&lt;i&gt;world&lt;/i&gt; 等标记将由 InnerText 转换为 helloworld - 删除标签。这个问题很难解决,因为显示通常由 CSS 决定,而不仅仅是由标记决定。

【讨论】:

我已经这样做了..但我的问题是如何解析表...?如果一个表包含另一个表,而您不知道它包含多少表,那么您将如何获取内部文本 有些东西我不明白。你如何加载你的htmldoc 变量? Webclient wb=new WebClient();htmldoc=wb.downloadstring(querry);

以上是关于将网页转换为纯文本..?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HTML 文本转换为纯文本? [复制]

使用 C++ 将 HTML 转换为纯文本

如何使用 Ajax 将 Summernote 文本从 JSON 数据转换为纯文本?

将 HTML 代码转换为纯文本,格式可用于文本文件 [重复]

LibreOffice:使用 --convert-to 将 PDF 转换为纯文本

使用 MIME::Entity 将 HTML 电子邮件转换为纯文本