Cheerio:使用分隔符从HTML中提取文本

时间:2015-07-21 15:31:12

标签: node.js cheerio

假设我有以下内容:

$ = cheerio.load('<html><body><ul><li>One</li><li>Two</li></body></html>');

var t = $('html').find('*').contents().filter(function() {
  return this.type === 'text';
}).text(); 

我明白了:

OneTwo

而不是:

One Two

如果我$('html').text(),我得到的结果相同。基本上我需要的是注入像(空格)或\n

这样的分隔符

注意:这不是一个jQuery前端问题,更像是与Cheerio和HTML解析相关的NodeJS后端问题。

3 个答案:

答案 0 :(得分:9)

这似乎可以解决问题:

var t = $('html *').contents().map(function() {
    return (this.type === 'text') ? $(this).text() : '';
}).get().join(' ');

console.log(t);

结果:

One Two

稍微改进了我的解决方案:

var t = $('html *').contents().map(function() {
    return (this.type === 'text') ? $(this).text()+' ' : '';
}).get().join('');

答案 1 :(得分:3)

您可以使用TextVersionJS包生成html字符串的纯文本版本。您也可以在浏览器和node.js中使用它。

var createTextVersion = require("textversionjs");

var yourHtml = "<h1>Your HTML</h1><ul><li>goes</li><li>here.</li></ul>";

var textVersion = createTextVersion(yourHtml);

npm下载并以Browserify为例。

答案 2 :(得分:0)

您可以使用以下功能从由whitespace分隔的html中提取文本:

function extractTextFromHtml(html: string): string {
  const cheerioStatic: CheerioStatic = cheerio.load(html || '');

  return cheerioStatic('html *').contents().toArray()
    .map(element => element.type === 'text' ? cheerioStatic(element).text().trim() : null)
    .filter(text => text)
    .join(' ');
}