私はウェブサイト用に半作業スクレイピングスクリプトを書きました:
async function pageFunction(context) {
const {
request,
log,
skipLinks,
jQuery: $,
waitFor
} = context;
log.info('Pagination');
let timeoutMillis; // undefined
const buttonSelector = 'div.pagination-view-more';
//click on Show more button 5 times
for (let step = 0; step < 5; step++) {
log.info('Waiting for the "Show more" button.');
try {
await waitFor(buttonSelector, {
timeoutMillis
}); // Default timeout first time.
timeoutMillis = 5000; // 2 sec timeout after the first.
} catch (err) {
// Ignore the timeout error.
log.info('Could not find the "Show more button", we\'ve reached the end.');
break;
}
log.info('Clicking the "Show more" button.');
$(buttonSelector).click();
}
//export the results
var result = [];
$(".thing-card").each(function() {
result.push({
title: $(this).attr('title'),
//format Dec 15, 2019
date: $(this).find('.item-header .item-date').text().replace(/\s/g, ''),
});
});
return result;
}
上記の例では、[もっと見る] ボタンを 5 回クリックして、結果としてタイトルと日付をエクスポートしようとしています。問題は、すべての結果が得られないことです。スクリプトが本来よりも早く終了していると思います。
最後のスクリプトでは、修正された for ループを削除し、結果からの日付が今日から最大 -7 日 (または 1 週間) になるまでこのループを実行したいと思います。これは何とかApifyで可能ですか?