有关代理轮换的问题

时间:2019-10-29 06:53:30

标签: apify

我通过使用PuppeteerCrawler开发了一种抓取行为,目前已启用。和最大并发1,我有几个问题:

  1. 默认情况下是否启用了代理轮换,还是必须激活它?如何?
  2. 如果代理轮换处于活动状态,如何查看它的工作原理,例如在哪里可以获取使用的IP?
  3. 何时触发代理轮换,是否创建了新的搜寻器或是否打开了新的标签页?

最佳成绩, Wulfgääng

1 个答案:

答案 0 :(得分:2)

首先,您不需要将maxConcurrency设置为1。相反,您可以使用puppeteerPoolOptions选项来控制Chrome(或Chrome)实例,因为代理已绑定到它们(请参见答案1)。

  1. 默认情况下不启用代理轮换。要启用它,您需要按照以下步骤设置PuppeteerCrawler:
const crawler = new Apify.PuppeteerCrawler({
   ... // code omitted for brevity
   puppeteerPoolOptions: {
       maxOpenPagesPerInstance: 1,
       retireInstanceAfterRequestCount: 3,
       killInstanceAfterSecs: 5,
   },
   launchPuppeteerFunction: () => {
       return Apify.launchPuppeteer({
           useApifyProxy: true,
           // Use a new proxy with a new IP address for each new Chrome instance
           apifyProxySession: Math.random().toString() ,
       })
       // Or you can use proxyUrl option
       // const proxyUrl = Apify.getApifyProxyUrl({ /*groups,*/ session: Math.random().toString() })
       // return Apify.launchPuppeteer({
       //    proxyUrl,
       // })
   },
   ...
});
  1. 您只需要将消息记录到控制台console.log()。要获取代理的IP,请使用以下代码:
...
const request = require('request-promise-native');
...
const session = Math.random().toString();
const proxy = Apify.getApifyProxyUrl({ /*groups,*/ session })
const { clientIp } = await request({ url: 'https://api.apify.com/v2/browser-info', proxy, json: true });

  1. 使用PuppeteerCrawler时,PuppeteerPool的基础实例负责创建和处理铬(或铬)实例。那些铬实例是通过Puppeteer在有或没有代理设置的情况下启动的(取决于传递给PuppeteerCrawler的选项)。