使用新的proxyUrl重试失败的页面

时间:2019-11-27 09:28:07

标签: javascript docker apify

我已经开发了基于Actor + PuppeteerCrawler + Proxy的搜寻器,并希望重新搜寻失败的页面。为了增加重新刮擦的机会,我想切换到另一个proxyUrl。这个想法是,使用修改后的launchPupperteer函数和一个不同的proxyUrl创建一个新的搜寻器,然后重新加入失败的页面。请检查下面的示例代码。

但是不幸的是,它不起作用,尽管我通过使用drop和opens重设了请求队列。是否可以通过将PuppeteerCrawler与其他proxyUrl配合使用来重新抓取失败的页面?

最好的问候, 沃尔夫冈

for(let retryCount = 0; retryCount <= MAX_RETRY_COUNT; retryCount++){

    if(retryCount){
        // Try to reset the request queue, so that failed request shell be rescraped
        await requestQueue.drop();
        requestQueue = await Apify.openRequestQueue();   // this is necessary to avoid exceptions
        // Re-enqueue failed urls in array failedUrls >>> ignored although using drop() and reopening request queue!!!
        for(let failedUrl of failedUrls){
            await requestQueue.addRequest({url: failedUrl});
        }
    }

    crawlerOptions.launchPuppeteerFunction = () => {
        return Apify.launchPuppeteer({
            // generates a new proxy url and adds it to a new launchPuppeteer function
            proxyUrl: createProxyUrl()
        });
    };

    let crawler = new Apify.PuppeteerCrawler(crawlerOptions);
    await crawler.run();

}

1 个答案:

答案 0 :(得分:1)

我认为您的方法应该行得通,但另一方面,它没有必要。我不确定createProxyUrl会做什么。

您可以提供具有auto用户名的通用代理URL,该URL将使用Apify上的所有数据中心代理。或者,您可以直接向PuppeteerCrawler提供proxyUrls

别忘了您必须切换浏览器才能从代理获取新IP。本文的更多内容-https://help.apify.com/en/articles/2190650-how-to-handle-blocked-requests-in-puppeteercrawler