解决Apify网页抓取任务不稳定的方法是通过设置随机延迟和重试机制来增加稳定性,并确保在相同的运行之间得到相同的结果。以下是一个包含代码示例的解决方法:
const Apify = require('apify');
Apify.main(async () => {
// 创建一个PuppeteerCrawler来执行网页抓取任务
const crawler = new Apify.PuppeteerCrawler({
// 输入你的爬取目标URL
startUrls: ['https://example.com'],
// 配置Puppeteer实例
puppeteerOptions: {
// 设置headless模式,可根据需要进行更改
headless: true,
// 可以根据需要设置其他Puppeteer选项
},
// 配置页面处理程序
handlePageFunction: async ({ page }) => {
// 在这里编写你的页面处理逻辑
// 例如,你可以使用page.evaluate()来获取页面上的数据
// 让任务在每次请求之间等待一个随机延迟(例如1到5秒之间的随机值)
const randomDelay = Math.floor(Math.random() * 4000) + 1000;
await Apify.utils.sleep(randomDelay);
// 返回数据,可以保存或进行其他处理
const data = await page.evaluate(() => {
// 你的页面处理逻辑
return {
// 返回你需要的数据
};
});
// 输出数据
console.log(data);
},
// 在请求失败时进行重试的配置
handleFailedRequestFunction: async ({ request }) => {
// 在请求失败时等待一段时间(例如5到10秒之间的随机值)
const randomDelay = Math.floor(Math.random() * 5000) + 5000;
console.log(`请求 ${request.url} 失败,重试中...`);
await Apify.utils.sleep(randomDelay);
return true; // 返回true以进行重试
},
});
// 启动爬虫
await crawler.run();
});
上述代码示例中,我们通过使用Apify.utils.sleep()
函数在每次请求之间引入了一个随机延迟。这有助于避免过于频繁地访问目标网站,从而提高稳定性。
此外,我们还使用handleFailedRequestFunction
配置了一个请求失败时的重试机制。在请求失败时,我们等待一段时间(例如5到10秒之间的随机值),然后返回true
以进行重试。这有助于应对网络问题或其他临时错误,并增加任务的稳定性。
请注意,以上只是一个示例,你可以根据自己的需求进行调整和优化。