Не удается отобразить содержимое селекторов в Cheerio - PullRequest
0 голосов
/ 05 января 2020

Я пытаюсь извлечь таблицу с веб-сайта и хотел сначала получить все столбцы. После выполнения запроса я загружаю html в cheerio, но при попытке отобразить содержимое селектора на консоли ничего не появляется. Что меня смущает, так это то, что когда я пытаюсь использовать тот же самый селектор непосредственно на консоли страницы, он работает и показывает мне их все.

Вот URL Я очищаю. *

Вот селектор cheerio, который я использую для возврата столбцов. Содержимое, которое я хочу, находится в теге th с классом sorting.

$('.sorting').each(function (index, element) {
                const $element = $(element);
                console.log($element.text());
            });

А вот полный код.

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

const fundsExplorerUrl = 'https://www.fundsexplorer.com.br/ranking';

request(fundsExplorerUrl,
    function (error, response, body) {
        if (!error && response.statusCode == 200) {
            const $ = cheerio.load(body);

            $('.sorting').each(function (index, element) {
                const $element = $(element);
                console.log($element.text());
            });
        }
    }
);

Спасибо за помощь!

1 Ответ

1 голос
/ 20 января 2020

В необработанном HTML нет класса с именем sorting, потому что javascript динамически добавляет этот класс в dom, поэтому в данном конкретном случае c с помощью следующего кода вы можете собрать содержимое всех th теги, встроенные в тег thead тега table.

const request = require('request-promise');
const cheerio = require('cheerio');

const url = 'https://www.fundsexplorer.com.br/ranking';

async function crawl() {
    const rawHtml = await request(url);
    const $ = cheerio.load(rawHtml);

    $('table thead tr th')
        .each( (index, element) => {
        console.log($(element).text());
    })
}

crawl();

...