0

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

它存储在他们网站上的一个简单的 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),但不幸的是,这似乎并没有解决它。 刮痧不稳定

关于如何让这个抓取任务不断返回我需要的数据的任何建议?

4

1 回答 1

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
    };
}

你可以通过函数等待,我会等到函数的结果为真。您可以查看文档

于 2019-09-22T07:09:02.197 回答