node.js \ 清理 html 并删除标签
node.js \ sanitize html and also remove tags
如何告诉 "sanitize-html" 实际删除 html 标签(只保留其中的内容)?目前,例如,如果我将其设置为保留 div 部分,则在输出中它还会写入 <div>some content</div>
- 我只想要内部...('some content')
简而言之 - 我不需要标签、属性等 - 只需要那些元素的内容..
var Crawler = require("js-crawler");
var download = require("url-download");
var sanitizeHtml = require('sanitize-html');
var util = require('util');
var fs = require('fs');
new Crawler().configure({depth: 1})
.crawl("http://www.cnn.com", function onSuccess(page) {
var clean = sanitizeHtml(page.body,{
allowedTags: [ 'p', 'em', 'strong','div' ],
});
console.log(clean);
fs.writeFile('sanitized.txt', clean, function (err) {
if (err) throw err;
console.log('It\'s saved! in same location.');
});
console.log(util.inspect(clean, {showHidden: false, depth: null}));
var str = JSON.stringify(clean.toString());
console.log(str);
/*download(page.url, './download')
.on('close', function () {
console.log('One file has been downloaded.');
});*/
});
我是 sanitize-html 的作者。
您可以将 allowedTags 设置为空数组。 sanitize-html 不会丢弃不允许的标签的内容,只会丢弃标签本身(除了一些标签,如 "script" 和 "style",这没有意义)。否则,它不会对其最初的预期用途有多大用处,即清理从文字处理器等复制并粘贴到富文本编辑器中的标记。
但是,如果您有如下标记:
<div>One</div><div>Two</div>
结果会是:
一二
要解决这个问题,您可以使用 textFilter 选项来确保标记文本后始终至少跟一个 space:
textFilter: function(text) {
return text + ' ';
}
但是,这也会在包含 "strong" 和 "em".
等内联标记的句子中引入额外的 spaces
所以我想得越多,对你来说最好的答案可能是一个完全不同的 npm 模块:
https://www.npmjs.com/package/html-to-text
它被广泛使用并且比您的用例更适合。 sanitize-html 真正适用于您需要标签的情况...只是不是错误的标签。
如何告诉 "sanitize-html" 实际删除 html 标签(只保留其中的内容)?目前,例如,如果我将其设置为保留 div 部分,则在输出中它还会写入 <div>some content</div>
- 我只想要内部...('some content')
简而言之 - 我不需要标签、属性等 - 只需要那些元素的内容..
var Crawler = require("js-crawler");
var download = require("url-download");
var sanitizeHtml = require('sanitize-html');
var util = require('util');
var fs = require('fs');
new Crawler().configure({depth: 1})
.crawl("http://www.cnn.com", function onSuccess(page) {
var clean = sanitizeHtml(page.body,{
allowedTags: [ 'p', 'em', 'strong','div' ],
});
console.log(clean);
fs.writeFile('sanitized.txt', clean, function (err) {
if (err) throw err;
console.log('It\'s saved! in same location.');
});
console.log(util.inspect(clean, {showHidden: false, depth: null}));
var str = JSON.stringify(clean.toString());
console.log(str);
/*download(page.url, './download')
.on('close', function () {
console.log('One file has been downloaded.');
});*/
});
我是 sanitize-html 的作者。
您可以将 allowedTags 设置为空数组。 sanitize-html 不会丢弃不允许的标签的内容,只会丢弃标签本身(除了一些标签,如 "script" 和 "style",这没有意义)。否则,它不会对其最初的预期用途有多大用处,即清理从文字处理器等复制并粘贴到富文本编辑器中的标记。
但是,如果您有如下标记:
<div>One</div><div>Two</div>
结果会是:
一二
要解决这个问题,您可以使用 textFilter 选项来确保标记文本后始终至少跟一个 space:
textFilter: function(text) {
return text + ' ';
}
但是,这也会在包含 "strong" 和 "em".
等内联标记的句子中引入额外的 spaces所以我想得越多,对你来说最好的答案可能是一个完全不同的 npm 模块:
https://www.npmjs.com/package/html-to-text
它被广泛使用并且比您的用例更适合。 sanitize-html 真正适用于您需要标签的情况...只是不是错误的标签。