返回博客

Firecrawl、Crawl4AI 和 Crawlee 的代理:无阻碍收集 RAG 数据库

Firecrawl、Crawl4AI 和 Crawlee 默认使用您服务器的 IP 地址,并完整加载页面——包括在 markdown 中无法显示的图片。我们将讨论如何在每个工具中设置代理,如何启用多级升级(直接请求 → 数据中心 → 居民代理),以及如何切断媒体流量,以避免为 RAG 收集数据而产生巨额流量费用。

📅2026年8月22日
Firecrawl、Crawl4AI 和 Crawlee 的代理:无阻碍收集 RAG 数据库
```html

“在 Docker 中启动 Firecrawl,针对域名列表,获得 RAG 的 markdown” 的方案在前一千个页面中运行良好。之后会出现两个账单。第一个——来自反机器人系统:部分域名开始返回 403 而不是内容,知识库中出现漏洞,您会在助手回答“提供的材料中没有信息”时得知。第二个账单——流量:爬虫诚实地拉取每一张图片和每一个字体,而这些在最终的 markdown 中仍然不会出现。

我们来看看如何将代理连接到 2026 年最流行的三个 LLM 爬虫——Firecrawl、Crawl4AI 和 Crawlee——以及如何设置它们,使代理仅在需要的地方工作,而不是在每个页面上消耗数千兆流量。

本指南适合谁

如果您正在为 RAG 收集文档库,填充内部知识库,构建数据管道以进行再训练,或者只是定期下载数百个域名——这就是您的情况。下面的三个工具在默认配置下使用您服务器的 IP 并完全加载页面。这两个默认设置需要更改。

根据流行度的数字,问题的规模显而易见:在发布时,Firecrawl 在 GitHub 上大约有 17 万个星标(许可证 AGPL-3.0),Crawl4AI 大约有 7.9 万个,Apify 的 Crawlee 大约有 2.5 万个。这已经不是小众实验,而是标准工具,反机器人系统对它们的行为了解得不比您少。

账单一:403 而不是内容

收集文档库时的关键错误是认为如果爬虫没有崩溃,它就成功了。Firecrawl 和 Crawl4AI 在被阻止的页面上返回的不是异常,而是结果:反机器人页面、浏览器检查页面或拒绝访问的简短文本。形式上这是有效的 markdown,它可以平稳地放入向量数据库,并在用户第一次请求时存在。

因此,在进行任何代理设置之前,首先需要做的是添加结果质量控制。最小的选项是筛选出短于某个阈值的文档(对于典型的内容页面,合理的文本长度为 500–800 个字符),并单独捕捉文本中的特征标记——连接检查、启用 JavaScript 的提及、“拒绝访问”。这些文档不会被放入数据库,而是进入重新爬取的队列——通过代理。

账单二:您丢弃的千兆字节

这里需要用到算术。根据 2025 年 HTTP Archive 的 Web Almanac 数据,媒体主页面的中位数大小约为 2.86 MB(桌面)和 2.56 MB(移动)。其中,主页面的图像约占 1059 KB,内部页面约占 911 KB,JavaScript 占 697 KB 和 632 KB。因此,图片是最重的类别,约占页面重量的三分之一。

现在回想一下,您对结果做了什么。您将页面转换为 markdown,并将其切割为嵌入块。图像根本不进入这个管道——在最好的情况下,只剩下一行 alt 文本。视频、字体、分析脚本、广告像素——也都被忽略。

如果通过按流量计费的住宅代理进行爬取,您实际上是在为您在下一步管道中丢弃的数据支付运费。在 10 万页面的文档库中,“拉取所有”和“仅拉取 HTML 和文本”之间的差异不是以百分比来衡量的,而是以倍数来衡量的。具体的节省取决于网站的主题:媒体和电子商务比文档和博客更重。

步骤 1. 升级而不是“全代理”

节省最多的主要架构技巧是:不要让所有流量都通过代理。在收集知识库时,大部分域名——文档、博客、参考网站、政府门户——直接提供内容,并且不会阻止任何人。代理只对少数人有用。

正确的方案是多层次升级:首先是直接请求,当出现阻止迹象时——转到下一个层级。而且这不是自定义的临时解决方案,两个主要框架都能开箱即用。

在 Crawlee 中,有 tieredProxyUrls。层级按从便宜到昂贵列出,爬虫在被阻止时自动向上升级,然后定期尝试返回到较低层级:

const proxyConfiguration = new ProxyConfiguration({
    tieredProxyUrls: [
        [null],
        ['http://user:pass@datacenter-proxy:8080'],
        ['http://user:pass@residential-proxy:8000'],
    ]
});

文档中的一个重要细节:tieredProxyUrls 仅在通过爬虫实例使用时有效。直接调用 newUrl() 将产生意想不到的结果。

在 Crawl4AI 中,类似的机制出现在 0.8.5 版本中,并在当前分支中存在(发布时的最新版本为 2026 年 7 月 15 日的 v0.9.2)。它被称为代理升级,并在 CrawlerRunConfig 中直接配置:三层阻止检测——已知的反机器人供应商、一般阻止指标和页面结构完整性检查——加上通过代理链的自动重试。

from crawl4ai import CrawlerRunConfig
from crawl4ai.async_configs import ProxyConfig

config = CrawlerRunConfig(
    proxy_config=[ProxyConfig.DIRECT, ProxyConfig(server="http://my-proxy:8080")],
    max_retries=2,
)

请注意 ProxyConfig.DIRECT 是第一个元素——这就是“首先尝试不使用代理”。

步骤 2. 在每个工具中连接代理

接下来是具体的设置。操作顺序相同:首先是代理,然后是切断多余的流量,最后是检查。

  1. Firecrawl(自托管)。 代理通过三个环境变量设置,这些变量被传递给 Playwright:PROXY_SERVERPROXY_USERNAMEPROXY_PASSWORD。它们在 .env 中为 apps/api 指定;在注释中,开发者明确表示,可以指定一个代理服务,该服务在每个请求上轮换 IP,而不是静态地址。
  2. Crawl4AI。 代理存在于 BrowserConfig 中,在 proxy_config 字段中——这是一个 ProxyConfig 对象或包含 serverusernamepassword 字段的字典。整个爬虫会话使用一个浏览器配置;每次调用 arun() 时都会传递一个单独的 CrawlerRunConfig
  3. Crawlee。 ProxyConfiguration 类带有 proxyUrls 选项——一个地址列表,库按轮询方式使用(round-robin)。列表中的 null 表示“无代理”。集成是全面的:HttpCrawlerCheerioCrawlerJSDOMCrawlerPlaywrightCrawlerPuppeteerCrawler
  4. 点对点规则。 如果知道哪些域名被阻止,哪些没有,在 Crawlee 中有 newUrlFunction——基于请求 URL 选择代理的自定义逻辑。对于白名单域名返回 null,对于其他域名返回代理地址。这是最便宜的选项,当目标列表稳定时。
  5. 检查。 在实际运行之前,通过设置好的爬虫运行一个返回您外部 IP 的页面,确保您看到的是代理地址,而不是服务器地址。这三行代码可以节省一天的调试时间。

步骤 3. 切断所有不成为文本的内容

当代理连接后,开启流量节省——否则千兆字节的账单会比文档库的收集更快到来。

在 Firecrawl 中,这由变量 BLOCK_MEDIA 负责。在官方配置示例中,它有一个字面注释:如果您想阻止媒体请求以节省代理带宽,请设置它。这是消除主要开支的最快方法。

在 Crawl4AI 中,类似的控制在 BrowserConfig 中存在:text_mode 关闭图像并加快文本爬取,light_mode 关闭部分浏览器的后台功能,avoid_css 阻止加载 CSS。它们可以组合使用。对于 RAG 的文档库收集,这几乎总是正确的组合——您不需要布局,只需要文本。

在 Crawlee 中,逻辑是不同的:如果内容以 HTML 形式提供,使用 CheerioCrawlerHttpCrawler 而不是浏览器爬虫。普通的 HTTP 请求而不是完整的渲染——这不仅是流量节省,而是支出顺序的不同。浏览器爬虫(PlaywrightCrawlerPuppeteerCrawler)仅保留给那些没有 JavaScript 无法收集的页面。

潜在问题

会话与轮换。 每个请求更换 IP 本身看起来可疑,并且会破坏多步骤场景——分页、同一域内的跳转。在 Crawlee 中,每次调用 newUrl() 都将代理与 Session 对象绑定,它们与浏览器指纹和头信息一起轮换。不要手动切断这种绑定。

媒体已关闭,但内容消失。 部分网站通过懒加载不仅加载图片,还加载文本。在启用 text_modeBLOCK_MEDIA 后,务必运行 20–30 页的抽样检查,并将文本量与基准进行比较。

无限重试。 代理的级别升级意味着同一顽固页面可能被下载三次——而这三次都要付费。限制 max_retries 并建立一个域名列表,在 N 次失败后完全排除。

Robots.txt 和法律框架。 到 2026 年,数据收集用于训练和 RAG 的监管比几年前更严格——从披露来源的要求到拒绝文本和数据挖掘的机制。确保您的管道尊重这些信号,直到它在数十万页面上运行。

为 RAG 管道选择什么类型的代理

答案取决于您处于哪个升级级别。

  • 零级——无代理。 文档、开源项目、政府网站、大多数企业博客。在这里,服务器的 IP 正常工作,没什么好付费的。
  • 中级——数据中心代理 快速且便宜,适用于简单的速率限制和区域限制。在收集大量文档时,这是工作马:当体积以数百 GB 计时,每 GB 的价格差异成为主要因素。
  • 高级——住宅代理 针对具有严密反机器人保护的域名,数据中心子网在入口处被过滤。因此,它们不能作为默认级别——按流量计费使每个多余的图片都成为支出的一部分。

在构建管道之前,值得诚实地计算经济性:我们分析了 解析一百万页面的完整成本,考虑了页面的重量、重试和隐藏费用。还有一个在编写第一行代码之前值得问的问题:是否真的需要爬取——在 官方 API 与现成数据集和解析 的分析中可以看到,对于某些来源,现成数据比自有爬虫便宜。

结论

在 LLM 爬虫中,代理并不是一个“开/关”开关,而是一个三层方案。直接请求作为默认级别,数据中心代理作为中级,住宅代理仅用于那些无法通过其他方式获取的域名。此外,严格切断媒体,因为您收集的是文本,而为字节付费。

工作顺序很简单:首先是结果质量控制(否则您不会知道文档库的一半是占位页面),然后是通过框架本身进行的代理升级,最后是流量节省。按照这个顺序——文档库将完整,账单将可预测。

```