Apify web scraper задача не стабильная.Получение разных результатов между прогонами минут друг от друга - PullRequest
0 голосов
/ 22 сентября 2019

Я строю очень простой скребок, чтобы получить информацию «сейчас играет» от онлайн-радиостанции, которую я тоже люблю слушать.

Он хранится в простом элементе p на их сайте: html data location

Теперь, используя стандартный apify / web-scraper, я столкнулся со странной проблемой.Очистка иногда работает, но иногда не использует этот код:

async function pageFunction(context) {
    const { request, log, jQuery } = context;
    const $ = jQuery;
    const nowPlaying = $('p.js-playing-now').text();
    return {
        nowPlaying
    };
}

Если работает скребок, я получаю такой результат: [{"nowPlaying": "Hangover Hotline - hosted by Lamebrane"}]

Но если это не так, я получаю это: [{"nowPlaying": ""}]

И разница между этими двумя царапинами составляет всего 5 минут.Сайт не меняется, данные всегда представлены одинаково.Я попытался установить все флажки, чтобы обойти защиту и различные сочетания параметров (Использовать Chrome, Использовать Stealth, Игнорировать ошибки SSL, Игнорировать CORS и CSP), но, к сожалению, это не помогло. Нестабильная очистка

Есть ли какие-либо предложения о том, как я могу получить эту задачу очистки, чтобы постоянно возвращать нужные мне данные?

1 Ответ

0 голосов
/ 22 сентября 2019

Было бы здорово, если бы вы могли прикрепить URL-адрес, это поможет мне выяснить проблему.

С предоставленной вами информацией, я предполагаю, что данные, которые вы хотите, загружаются асинхронно.Вы можете использовать функцию context.waitFor().

async function pageFunction(context) {
    const { request, log, jQuery } = context;
    const $ = jQuery;
    await context.waitFor(() => !!$('p.js-playing-now').text());
    const nowPlaying = $('p.js-playing-now').text();
    return {
        nowPlaying
    };
}

Вы можете передать функцию в ожидание, и я буду ждать, пока результат функции станет истинным.Вы можете проверить документ .

...