首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在node.js中将HTML页面转换为纯文本?

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

Stack Overflow用户
提问于 2013-11-14 18:39:28
回答 5查看 25K关注 0票数 17

我知道以前有人问过这个问题,但我找不到node.js的好答案

我需要服务器端来提取纯文本(没有标签、脚本等等)。从获取的HTML页面中获取。

我知道如何在客户机端使用jQuery (获取body标记的.text()内容),但不知道如何在服务器端这样做。

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

代码语言:javascript
复制
  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,但找不到一种方法来获取纯文本。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-11-14 19:52:43

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

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

示例

(这不是在jsdom和node上进行的测试,只在Chrome中进行)

代码语言:javascript
复制
jQuery('script').remove()
jQuery('noscript').remove()
jQuery('body').text().replace(/\s{2,9999}/g, ' ')
票数 9
EN

Stack Overflow用户

发布于 2021-01-15 16:30:43

对于那些寻找正则表达式解决方案的人,这里是我的一个

代码语言:javascript
复制
const HTMLPartToTextPart = (HTMLPart) => (
  HTMLPart
    .replace(/\n/ig, '')
    .replace(/<style[^>]*>[\s\S]*?<\/style[^>]*>/ig, '')
    .replace(/<head[^>]*>[\s\S]*?<\/head[^>]*>/ig, '')
    .replace(/<script[^>]*>[\s\S]*?<\/script[^>]*>/ig, '')
    .replace(/<\/\s*(?:p|div)>/ig, '\n')
    .replace(/<br[^>]*\/?>/ig, '\n')
    .replace(/<[^>]*>/ig, '')
    .replace('&nbsp;', ' ')
    .replace(/[^\S\r\n][^\S\r\n]+/ig, ' ')
);
票数 8
EN

Stack Overflow用户

发布于 2018-07-03 04:32:33

另一个答案是,使用JSDOM,但不需要jQuery。试试这个:

代码语言:javascript
复制
JSDOM.fragment(sourceHtml).textContent
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19985667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档