#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 — запрос. Если вам нужно очистить всю страницу, рассмотрите возможность использования браузера без головы в узле. Кукольник-это хорошо известная посылка.