Собственный JQuery .text () с NodeJS / Cheerio

Я пытаюсь кодировать jQuery.fn.text с помощью NodeJS / Cheerio.

Я это сделал :

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. Я просто хочу знать, как получить текст элемента а-ля jQuery с помощью NodeJS / Cheerio.


person LeMoussel    schedule 29.08.2019    source источник
comment
Все, что вам нужно, это собственное свойство textContent родительского элемента, возможно, с некоторыми поправками для обработки любых пробелов / разрывов строк. Если это не сработает для вас, не могли бы вы добавить HTML-код к вопросу вместе с ожидаемым результатом.   -  person Rory McCrossan    schedule 29.08.2019
comment
jQuery работает на стороне клиента, а Node.js / Cheerio - на стороне сервера.   -  person PeterKA    schedule 29.08.2019
comment
@RoryMcCrossan HTML-код - это код веб-сайта www.lemonde.fr. Ожидаемый результат - результат console.log($('body').text()). Я не могу связаться с ним, потому что он слишком важен. То же самое и с выходом.   -  person LeMoussel    schedule 29.08.2019


Ответы (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, nodejs, package.json и request & cheerio, установленные с помощью npm. Затем в командной строке просто запустите:

node cheerio-test

Ссылка

node.js

запрос

cheerio

person PeterKA    schedule 29.08.2019
comment
Я знаю среду NodeJS / Cheerio. Мой вопрос в том, что я не получаю одинаковый результат между console.log($('body').text()) и console.log(getText($('body'))) - person LeMoussel; 29.08.2019