验证网页抓取工具任务不稳定。间隔运行几分钟即可获得不同的结果

时间:2019-09-21 22:31:31

标签: javascript web-scraping apify

我正在构建一个非常简单的刮板,以便从我也喜欢收听的在线广播电台中获取“正在播放”信息。

它存储在他们网站上的简单p元素中: data html 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,使用隐形,忽​​略SSL错误,忽略CORS和CSP),但是不幸的是,这似乎并不能解决问题。 Scraping instable

关于如何获取此抓取任务以不断返回所需数据的任何建议吗?

1 个答案:

答案 0 :(得分:0)

如果您可以附加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
    };
}

您可以传递该函数以等待,我将等待直到该函数的结果为真。您可以检查doc