【问题标题】:Own JQuery's .text() with NodeJS/Cheerio使用 NodeJS/Cheerio 拥有 JQuery 的 .text()
【发布时间】:2020-01-02 18:28:48
【问题描述】:

我正在尝试使用 NodeJS/Cheerio 编写 jQuery.fn.text。

我做到了:

function getText(elems) {
      var ret = '', elem;

      for (var i = 0; elems[i]; i++) {
        elem = elems[i];

        // Get the text from text nodes
        if (elem.nodeType === 3) {  
          ret += elem.nodeValue;
        } else if (elem.nodeType !== 8) { 
          // Traverse everything else, except comment nodes
          ret += getText(elem.childNodes);
        }
      }

      return ret;
}

request({
  method: 'GET',
  url: 'https://www.lemonde.fr/',
}, (error, response, html) => {
  if (error) return console.error(error);

  const $ = cheerio.load(html);
  console.log(getText($('body')));    
});

但我在console.log(getText($('body')))console.log($('body').text()) 之间没有得到相同的结果。 getText 缺少一些文本。结果不完整。

说明: 我知道如何使用 jQuery.fn.text。我只是想知道如何使用 NodeJS/Cheerio 获取元素的文本 à la jQuery。

【问题讨论】:

  • 您所需要的只是父元素的原生textContent 属性,可能需要进行一些修改以处理任何空格/换行符。如果这对您不起作用,您能否将 HTML 与您期望的输出一起添加到问题中
  • jQuery 在客户端运行,而 Node.js/Cheerio 在服务器端运行。
  • @RoryMcCrossan html 代码是 www.lemonde.fr 网站之一。预期的输出是console.log($('body').text()) 的结果我无法联系到他,因为他太重要了。输出也是如此。

标签: jquery node.js cheerio


【解决方案1】:

node.js/cheerio 代码应该放在一个单独的文件中,该文件在服务器端运行。

//cheerio-test.js

const request = require('request');
const $ = require('cheerio');

request('https://www.lemonde.fr/', (error, response, html) => {
  if (error) return console.error(error);

  console.log( $('body').html() ); //or console.log( $('body').text() );   
});

您需要在服务器上安装正确的环境,包括使用 npm 安装的 npmnodejspackage.jsonrequestcheerio。然后,在命令行上运行:

node cheerio-test

参考

node.js

request

cheerio

【讨论】:

  • 我知道 NodeJS/Cheerio 环境。我的问题是我在console.log($('body').text())console.log(getText($('body'))) 之间没有得到相同的结果
猜你喜欢
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
相关资源
最近更新 更多