Не получая ожидаемого результата — Приветствую

#javascript #web-scraping #cheerio

Вопрос:

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

 <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NX744H"height="0" width="0" style="display:none;visibility:hidden"></iframe>     
<img src="https://www.naukri.com/akam/11/pixel_74f1c4ec?a=dD1hYjJmYTA0N2JkNDM1ODI5NmY0YmZlNzk1ZTMxNGI4YTU1YmEyNWI4JmpzPW9mZg==" style="visibility: hidden; position: absolute; left: -999px; top: -999px;" />
 

Вот код

 'use strict';
const { default: axios } = require('axios');
const cheerio = require('cheerio');

async function jobUrls() {
    try {
        const siteUrl = 'https://www.naukri.com/cse-jobs?k=cse';
        const { data } = await axios({
            method: 'GET',
            url: siteUrl,
        });
        const $ = cheerio.load(data);
        console.log($.text())
    }
    catch (er) {
        console.log(er)
    }
}
jobUrls();
 

Ответ №1:

Веб-сайт https://www.naukri.com/cse-jobs?k=cse , скорее всего, SPA (одностраничное приложение). Это не может быть очищено простым способом. В этом разница между доступом к сайту с помощью браузера и axios.

  • (axios) : запросить HTML — > получить HTML-ответ, содержащий сценарии — > > готово
  • (браузер) : запросить HTML — > получить HTML-ответ, содержащий сценарии — > > запустить сценарии — > > > получить дополнительные данные — > > > > визуализация — > > > > > готово.

Это ограничение axios заключается в том , что он выполняет только один HTTP — запрос. Если вам нужно очистить всю страницу, рассмотрите возможность использования браузера без головы в узле. Кукольник-это хорошо известная посылка.