我正在构建一个非常简单的刮板,以便从我也喜欢收听的在线广播电台中获取“正在播放”信息。
它存储在他们网站上的简单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
关于如何获取此抓取任务以不断返回所需数据的任何建议吗?
答案 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。