Парсинг динамического сайта JavaScript?

Ребят, смотрите, у меня есть сайт, с которого я должен получить данные.
Но, проблема в том, что данные появляются не сразу, через какой-то промежуток времени.

download(count) {
        return new Promise((resolve, reject) => {
            const url = 'https://www.donationalerts.com/widget/instream-stats?id=1535604&token=';
            console.log(url);
            https.get(url, res => {
                res.setEncoding('utf8');

                let data = '';
                setTimeout( okey, 5000)

                function okey () {
                    res.on('data', buf => {
                        console.log(buf);
                        data += buf;
                    })
                }

                res.on('end', () => {
                    resolve(data);
                })
            }).on('error', reject);
        });
    }


Получаю данные таким способом, но... Там не вся информация. Что делать? Как спарсить всю страницу целиком?

Или может вы посоветуете какой-нибудь другой способ парса?
  • Вопрос задан
  • 290 просмотров
Пригласить эксперта
Ответы на вопрос 3
@formasters777
Тут есть много факторов,
если сайт медленно даёт тебе ответ, то:
-скорость твоего соединения? 3G, 4G, кабель 20Мб/с;
-можно взять вместо твоего клиента https, например axios или fetch;
-может быть так, что данные на сайте появятся только через 10сек. после события load, т.к. это просто запрограммировано на сайте так;
-можешь попробовать безголовый способ типа Puppeteer;
-в твоём коде вижу есть setTimeout( okey, 5000), но лучше возможно поменять условие на ожидание промиса?, пока данные не придут в промис, а туда придёт или resolve или reject, и ты увидишь в ответе там что-то.
-если у тебя много запросов, к разным сайтам, можешь подумать о методах промиса .all() или allSettled().
Ответ написан
Комментировать
VoidVolker
@VoidVolker Куратор тега JavaScript
Разработчик ПО и IT-инженер
Ожидать, когда все нужные данные полностью загрузится. Если на странице сайта используется JS для загрузки данных, то либо выяснить откуда и как эти данные загружаются либо использовать браузерный движок (селениум, NWJS и т.д.).
Ответ написан
Комментировать
diasasx
@diasasx
Веб разработчик, аналитик
Еще сталкивался с таким - на самом сайте данные появляются только при прокрутке страницы вниз, я пользовался не своим парсером, не буду рекламировать, суть решения - написал в поддержку разработчика парсера, чтобы сделали мне при открытии ресурса имитацию прокрутки страницы до конца, текст загружался, после этого только алгоритм начинал парсить. Так все получилось.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы