发布时间: 2026年10月20日更新时间: 2026年10月20日

Crawlee 代理轮换怎么配置:ProxyConfiguration、Session 与重试

学习 Crawlee 代理轮换配置,了解 ProxyConfiguration、SessionPool、Session 代理关联和重试上限,并验证实际代理 IP 出口。

Crawlee 代理轮换配置需要分别处理代理 IP 选择、Session 生命周期和失败重试。以下示例按 Crawlee 3.18 API 组织,项目应锁定并核对该版本。maxRequestRetries 设为 2,表示普通可重试失败最多再尝试 2 次;收到目标站 403/429 时,示例在响应处理阶段抛出不可重试错误,不因限制响应换代理重试。

先决定每个请求换出口,还是按 Session 复用

先确定目标是每个请求轮换、同一会话复用出口,还是在满足指定条件后换出口。Session 管理请求会话状态,代理配置负责提供代理选择;实际绑定方式取决于版本和 Crawler 实现。测试时分别记录 Session 标识和代理选择结果,不把新建 Session 自动当作更换代理。

用 ProxyConfiguration 和 SessionPool 配置 Crawlee 代理

以下示例用两个代理 URL 展示列表轮换;Crawlee 从列表选择代理,不代表单个代理服务端点内部一定轮换。SessionPool 由 crawler 按 3.18 选项管理。开始运行前设置两个由代理服务商提供的安全环境变量,并对照 Crawlee JavaScript 代理管理指南:

```js
import { CheerioCrawler, NonRetryableError, ProxyConfiguration } from 'crawlee';

const proxyConfiguration = new ProxyConfiguration({
proxyUrls: [process.env.PROXY_URL_A, process.env.PROXY_URL_B],
});

const crawler = new CheerioCrawler({
proxyConfiguration,
useSessionPool: true,
sessionPoolOptions: { maxPoolSize: 10 },
maxRequestRetries: 2,
async requestHandler({ request, response, session, proxyInfo, log }) {
if (response?.statusCode === 403 || response?.statusCode === 429) {
throw new NonRetryableError(目标站返回 ${response.statusCode};停止该请求);
}
let proxyHost;
let proxyPort;
try {
const selected = new URL(proxyInfo?.url);
proxyHost = selected.hostname;
proxyPort = selected.port;
} catch {}
log.info('请求已处理', { url: request.url, sessionId: session?.id, proxyHost, proxyPort });
},
});

await crawler.run(['https://example.com/']);
```

运行前将两个代理 URL 放入 PROXY_URL_A、PROXY_URL_B 环境变量。不要把真实账号和密码写进代码仓库,日志只记录代理主机和端口,不输出含认证信息的 URL。

SessionPool 管理会话对象与生命周期,maxPoolSize: 10 限制池容量,不表示保证固定 10 个代理 IP。proxyInfo.url 表示本次请求所选代理 URL;上例只记录脱敏后的主机和端口。Session 复用是否对应相同出口,还取决于 crawler 的 Session 关联行为、代理列表选择和代理服务是否支持粘性;应分别记录 Session ID、代理选择和实际出口检测结果。

按错误类型设置重试次数和停止条件

结果或错误建议检查重试边界
DNS/连接超时网络连通性、代理地址、目标服务状态先做有限次数的退避重试并记录错误
代理认证失败凭证、端口和认证方式修正配置前不重复请求
目标站 403/429 或验证码访问规则、请求频率和账号状态不因限制响应换代理重试;停止该请求并按规则处理
目标内容解析失败页面结构、响应类型和解析逻辑修正代码后再用合规样本验证

重试次数、退避间隔和停止条件应符合目标服务的访问规则与业务要求。限制响应排查可参考已发布的爬虫遇到 403、429 和验证码时的排查方式。设置有限重试,避免用无限重试掩盖连接问题。

验证同一 Session 是否使用预期出口

用受控测试端检查同一 Session 与不同 Session 的出口差异。记录 Crawlee 版本、Crawler 类型、请求编号、脱敏 Session 标识、代理主机/端口、状态码和普通重试次数;另用出口检测确认实际 IP。限制响应的停止条件见上表,不重复发起受限请求。

FAQ

新建 Session 就会切换代理吗?

不能仅凭 Session 变化作此判断。需检查当前版本如何把 Session 与代理选择关联,并用日志或出口检测验证。

maxRequestRetries: 2 表示总共请求几次?

通常表示首次尝试失败后最多再重试 2 次,即最多尝试 3 次;实际行为以项目锁定的 Crawlee 版本为准。403/429 是限制响应,不应通过更换代理继续请求,应按目标站规则停止并排查。