我正在寻找一种方法来将一个装满 HTML 文件的文件夹转换为纯文本。我希望文本文件尽可能像我在 Web 浏览器中选择所有文本、复制文本并将其粘贴到纯文本文件中时得到的那样。
不,真的,我想要未格式化的纯文本。我找到的所有解决方案都会生成 Markdown 或类似的东西,或者尝试保留布局,或者使用星号和下划线来指示文本格式,或者在输出文件中保留脚本的内容,或者一些聪明的东西。
我想要的只是作者按照写作顺序写下的文字。我甚至不在乎处理过程是否将列表中的所有列表项转换为单个段落,甚至将整个文档折叠为单个段落。所有这些都比给我文档中包含的实际语言以外的任何东西要好得多。
我想要一个终端应用程序或 Python 脚本,但我会选择任何我能得到的东西。
答案1
html2text是一个 Python 脚本,可将 HTML 页面转换为等效的 Markdown 结构文本。html2text 可以在任何安装了 Python 的操作系统中下载并运行。html2text 程序位于许多 Linux 发行版的存储库中,可以从命令行运行,如下所示:
html2text -style pretty input.html
此命令不仅将原始 html 文件转换为文本,而且还能很好地使纯文本输出易于阅读。标题看起来像标题,列表看起来像列表,等等。
如果你无法自动将网页中的表格转换为无格式的文本,可以使用现代 Markdown 编辑器轻松完成此操作,例如泰波拉或者标记文本适用于 Windows/Mac/Linux 的 GUI 应用程序。比较这两个应用程序,Mark Text 比 Typora 更能准确捕获网页上的所有内容,而且 Typora 的编辑器更易于使用,所以我同时使用这两个应用程序。我使用 Mark Text 作为网页抓取器,然后将我捕获的 markdown 文本复制/粘贴到 Typora 中,并使用 Typora 进行编辑。
答案2
使用w3m -dump <page.html>
。
它将为您提供 html 文件的文本表示。
从手册页中:
-dump dump formatted page into stdout
尽管说了formatted
,但输出只是纯文本。
答案3
lynx -dump -nolist -nomargins
当使用 URL 从命令行运行时,它会将输出写入 stdout。这似乎工作得很好。 -nomargins
如果只能访问旧版本lynx
(即旧 UNIX 上的 Lynx 版本 2.8.5rel.5(2005 年 10 月 29 日)),则可能不受支持。
输出似乎没有任何标记和链接,但有一些潜在的例外(以下列表可能不典型或详尽):
- 表格数据中确实会出现额外的空白,并且至少在某些情况下,虽然空白通常有助于提取表格数据,但有时会出现不一致,从而使解析变得复杂。
- 虽然链接不会被转储,但可见文本可能会输出。例如,脚注引用可能会呈现为星号,或者在 wiki 上,可点击内容可能会呈现为等效的纯文本(没有底层 URL)。
- 一些参考资料可能会扩展并输出替代文本。
- 无序列表带有星号和缩进。
- 顺序列表转储带有数字和缩进的内容。
- 输入字段可能显示为下划线
答案4
Unix.com:如何仅删除文件中的 HTML 标签提供:
sed -n '/^$/!{s/<[^>]*>//g;p;}' filename
或html2text
CommandLineFu:删除所有 HTML 标签显示另一sed
行,或者awk
。
我相信这是多个程序提供的比较常见的操作,并且此任务最常见的名称是“剥离” HTML。快速Google 搜索:Linux 删除 html 标签显示多种解决方案,包括PHP:删除标签。