Skip to content

轮换代理

配合失败重试,自定义错误次数以及 HTTP 状态码为爬取目标自动轮换代理。

js
import { createCrawl } from 'x-crawl'

const crawlApp = createCrawl()

crawlApp
  .crawlPage({
    url: 'https://www.example.com',
    maxRetry: 10,
    proxy: {
      urls: [
        'https://www.example.com/proxy-1',
        'https://www.example.com/proxy-2'
      ],
      switchByHttpStatus: [401, 403],
      switchByErrorCount: 3
    }
  })
  .then((res) => {})

上面的示例中我们使用 switchByErrorCount 为每个代理设置了 3 次机会,当 3 次机会用完了就会自动切换下一个代理。如果提供 switchByHttpStatus ,那么就会优先根据状态码自动切换代理。

TIP

需要配合 maxRetry 失败重试才能使用,并且 maxRetry 必需大于该目标所有代理的 switchByErrorCount 总和,因为 maxRetry 控制该目标的重试次数。

可以在 创建爬虫应用实例、进阶用法、详细目标 这三个地方设置。

js
import { createCrawl } from 'x-crawl'

const crawlApp = createCrawl()

crawlApp
  .crawlPage({
    targets: [
      'https://www.example.com/page-1',
      'https://www.example.com/page-2',
      'https://www.example.com/page-3',
      'https://www.example.com/page-4',
      // 为此目标取消代理
      { url: 'https://www.example.com/page-6', proxy: null },
      // 为此目标单独设置代理
      {
        url: 'https://www.example.com/page-6',
        proxy: {
          urls: [
            'https://www.example.com/proxy-4',
            'https://www.example.com/proxy-5'
          ],
          switchByErrorCount: 3
        }
      }
    ],
    maxRetry: 10,
    // 为此次的目标统一设置代理
    proxy: {
      urls: [
        'https://www.example.com/proxy-1',
        'https://www.example.com/proxy-2',
        'https://www.example.com/proxy-3'
      ],
      switchByErrorCount: 3,
      switchByHttpStatus: [401, 403]
    }
  })
  .then((res) => {})

基于 MIT 许可发布