答案 0 :(得分:8)
这是我通过使用Jsoup迭代节点来输出文本(包括换行符)的函数。
public static String htmlToText(InputStream html) throws IOException {
Document document = Jsoup.parse(html, null, "");
Element body = document.body();
return buildStringFromNode(body).toString();
}
private static StringBuffer buildStringFromNode(Node node) {
StringBuffer buffer = new StringBuffer();
if (node instanceof TextNode) {
TextNode textNode = (TextNode) node;
buffer.append(textNode.text().trim());
}
for (Node childNode : node.childNodes()) {
buffer.append(buildStringFromNode(childNode));
}
if (node instanceof Element) {
Element element = (Element) node;
String tagName = element.tagName();
if ("p".equals(tagName) || "br".equals(tagName)) {
buffer.append("\n");
}
}
return buffer;
}
答案 1 :(得分:3)
w3m -dump -no-cookie input.html > output.txt
答案 2 :(得分:2)
我确实在html2txt: THE ASCIINATOR中找到了一个相对聪明的解决方案,它在生成类似输出的nroff方面做了令人钦佩的工作(例如在终端上运行man ls
)。它以StackOverflow用作输入的Markdown样式生成输出。
对于像此页面这样的中等复杂页面,输出为somewhat scattered,因为它会大力尝试将非线性布局转换为线性布局。较不复杂的标记的输出是pretty readable。
答案 3 :(得分:2)
如果你不介意硬包装/设计为等宽的输出,lynx -dump
会从HTML中生成好的纯文本。
答案 4 :(得分:0)
HTML to Text: 我将此声明表示将放弃除换行符之外的所有HTML格式。
我为这样的冒险所做的是使用正则表达式来检测任何一组标签圈。 如果标签内的值为br或br /,则插入换行符,否则标签将被丢弃。
它仅适用于简单的html页面。表格显然是线性化的。
我一直在考虑检测标题标签附件之间的标题值,以便转换器自动将标题放在页面顶部。需要加入更多算法。按照我的时间更好地度过......
我正在阅读使用Google数据API将文档上传到Google文档,然后使用相同的API将其下载/导出为文本。或者,为什么文本,当我可以做pdf。但如果您还没有Google帐户,则需要获得Google帐户。
答案 5 :(得分:-2)
您使用的语言是否重要?你总是可以使用模式匹配。基本上HTML lien break标签(br,p,div,...)可以替换为“\ n”并删除所有其他标签。您始终可以将标记存储在数组中,以便您可以轻松检查何时浏览HTML文件。然后任何其他标签和所有其他结束标签(/ p,..)可以用空字符串替换,从而获得结果。