使用 ruby 将 HTML 转换为纯文本并保持结构/格式



我想将html转换为纯文本。不过,我不想只是剥离标签,我想智能地保留尽可能多的格式。插入<br>标签的换行符,检测段落并设置其格式等。

输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有锚点或图像)。

我可以把几个正则表达式放在一起,让我达到 80%,但认为可能有一些现有的解决方案具有更多的智能。

首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而中断,或者很难管理和维护。

你可以使用Nokogiri来解析HTML并提取文本,非常快速地完成部分工作:

require 'nokogiri'
html = '
<html>
<body>
  <p>This is
  some text.</p>
  <p>This is some more text.</p>
  <pre>
  This is
  preformatted
  text.
  </pre>
</body>
</html>
'
doc = Nokogiri::HTML(html)
puts doc.text
>>  This is
>>  some text.
>>  This is some more text.
>>  
>>  This is
>>  preformatted
>>  text.

这样做的原因是 Nokogiri 返回文本节点,这些节点基本上是标签周围的空格,以及标签中包含的文本。如果您使用tidy对 HTML 进行飞行前清理,您有时可以获得更好的输出。

问题是当您将解析器的输出或任何查看 HTML 的方法与浏览器显示的内容进行比较时。浏览器关注以尽可能令人愉悦的方式呈现 HTML,忽略了 HTML 可能严重畸形和损坏的事实。解析器不是为这样做而设计的。

您可以在提取内容之前调整 HTML 以删除无关的换行符,例如 "n""r",然后用换行符替换<br>标记。关于SO有很多问题,解释了如何用其他东西替换标签。我认为Nokogiri网站也有这个教程之一。

如果你真的想做对,你需要弄清楚你想对<ul><ol>标签中的<li>标签以及表做什么。

另一种攻击方法是捕获其中一个文本浏览器(如 lynx)的输出。几年前,我需要对不使用元关键字标签的网站上的关键字进行文本处理,并找到了其中一个文本浏览器,可以让我以这种方式获取呈现的输出。我没有可用的来源,所以我无法检查它是哪一个。

相关内容

  • 没有找到相关文章

最新更新