每个模型都是对其数据的一次押注。无论你是从零开始预训练、针对某个领域进行微调、组建检索语料库,还是构建评估集,你从网络上采集的数据的质量与广度,决定了模型能力的上限。而以模型所需的规模采集网络数据——跨越数百万个页面和多个地区——会遇到每一个大型爬虫都会碰到的基础设施问题:单 IP 频率限制、因地理位置不同而呈现不同内容的站点,以及越来越多地屏蔽任何看起来像自动爬虫的请求的站点。住宅代理是使这种爬取成为可能的采集层,本文将介绍它们的适用场景,以及它们无法解决的部分——而这些部分对 AI 数据而言比通常情况下更为重要。
AI 团队实际上在采集什么
采集的形态因目标而异。预训练和持续预训练语料库是大规模、高流量的文本抓取,覆盖公开网络的大量切片。领域微调则更窄更深,是对某项任务相关站点的定向爬取。用于 RAG 系统的检索语料库需要按计划进行整理和刷新,以防索引内容过时。评估集和基准集规模较小,但需要具有代表性且干净。多模态工作在文本之上还需采集图像和其他资源。这些工作的共同点是底层都有一个采集层:可靠地从页面实际所在位置抓取大量公开页面。无论上层是什么,这一层都是相同的,也是本文接下来要讨论的核心。
规模:为什么单个 IP 无法爬取整个网络
网络不欢迎单个地址拉取数百万个页面。大多数站点执行单 IP 频率限制,一个从单一地点发送所有请求的爬虫会在数分钟内被限速,然后被封锁,爬取进度会远在模型所需的数据量之前就陷入停滞。即使限制较为宽松,单一连接对于一个以百万级文档计量的语料库而言也是瓶颈。
将爬取任务分散到众多住宅 IP 上,才能将缓慢的涓流变成语料库。每个 IP 都在自身的单 IP 限制范围内舒适运行,而整体吞吐量随着 IP 池的规模增长——这是每一个高流量采集方案所依赖的负载均衡逻辑,也是无限并发连接的用武之地。关键不在于压垮某个单一站点,而在于将大量、礼貌的爬取请求分散到足够多的地址上,使任何一个目标站点都不会从某个单一 IP 看到超出正常水平的流量。
代表性:语料库的广度取决于采集来源的覆盖范围
这一点是训练数据特有的,也容易被忽视。模型学习的是其所接收数据的分布,因此完全从某一个位置采集的语料库,只能继承该位置所能看到的那部分网络。许多站点按地区提供不同的内容:本地化页面、不同语言、特定地区的目录、价格、库存,有时甚至是完全不同的首页。从单一国家爬取网络,会系统性地低估该国家看不到的一切内容,而这种偏差会被固化进模型中。
国家级乃至城市级定向(在有必要时)让你能够采集到真实用户在各地区实际看到的页面版本,使语料库反映你真正想要的地理和语言分布,而不是由爬虫运行位置这一偶然因素所决定的结果。如果多语言覆盖或地区平衡是目标,这并非可有可无,而是代表性数据集与失衡数据集之间的分水岭。合法访问地区差异化内容的地理定向方式,正是从源头将广度构建到数据中的方法。
在站点加强反爬措施的情况下保持可访问性
站点对自动采集的防御已明显增强,其中相当大一部分针对的正是 AI 爬虫。已知的数据中心 IP 段和明显的机器人信号会被迅速屏蔽,一些大型站点现在会对不像普通人类访客的流量发起验证或拒绝访问。从数据中心地址运行的爬虫,越来越多地收到的是封锁和验证页面,而非实际内容。
住宅代理通过真实的家庭级 IP 路由请求,使每个请求看起来像普通访客而非数据中心的服务器,而且具有良好声誉的干净地址能够顺利通过,而被标记的地址则会遭到验证拦截。这是必要条件,但并非充分条件:IP 为你打开了门,其余则取决于是否像真实客户端一样行事——即合理的请求频率、诚实地处理触发封锁的信号,以及不因为技术上可行就猛烈轰炸目标站点。目标是以浏览器的方式采集公开数据,而不是强行突破一个已决定不愿被爬取的站点。
新鲜度:语料库会过时
数据集是某一时刻的快照,而网络在不断变化。检索语料库尤其需要定期刷新爬取,以使索引反映其来源的当前状态;持续预训练也有赖于拉取新内容。这使得采集成为一个持续的管道,而非一次性的工作。持续运行的管道需要能够在路由随时间降级时仍能正常运转。检测到某个 IP 被封锁、超时或触发验证后,将该路由退役,并在新路由上继续运行——这就是保持长时间爬取存活的故障切换模式。整个过程不应在黑盒中运行,因此需要监控管道:按来源统计的成功率、覆盖率和错误模式,能够告诉你某个目标站点何时更新了其防御机制,或者某段爬取是否在静默失败——在这一缺口以缺失数据的形式出现在下一次训练运行之前。
负责任地采集
说实话,对于 AI 数据而言这不是可选项。住宅代理是采集基础设施,而非许可授权。负责任地构建语料库意味着:仅采集公开数据,遵守每个站点的 robots 指令和服务条款,并以礼貌的方式爬取——设置频率限制和退避策略,确保不会拖垮你所依赖的站点。同样重要的,也是独立于你技术上是否能获取某页面之外的问题,是权利问题:能够采集数据并不等同于拥有用其进行训练的权利,版权、许可和个人数据法规是真实存在的约束,它们位于采集层之上,是团队的责任。请依法妥善处理个人数据和敏感数据。代理解决的是如何大规模访问公开页面的问题,采集什么以及是否有权采集,是你仍然需要自己做出的决策,认真对待这些问题,是可辩护的数据集与法律风险之间的区别。
一个最简洁的礼貌爬取示例
轮换住宅代理对你的爬虫而言就像一个普通代理。定向配置位于网关的用户名中,因此不带会话标识符的美国出口节点会按请求轮换,将爬取请求分散到整个 IP 池:
import timeimport requests
PROXY = "http://customer-USERNAME-country-us:PASSWORD@p.shifter.io:443"proxies = {"http": PROXY, "https": PROXY}
def fetch(url): r = requests.get(url, proxies=proxies, timeout=20, headers={"User-Agent": "research-crawler/1.0"}) r.raise_for_status() return r.text
for url in urls: # your queue of public pages try: html = fetch(url) store(html) # persist for the corpus except requests.HTTPError: retry_later(url) # on a block or timeout, back off and requeue time.sleep(1.0) # be polite; do not hammer a single origin分散队列,确保没有单个站点受到来自某一 IP 的突发请求冲击;遇到错误时退避而非强行重试;对于多语言或地区性覆盖,使用不同的国家目标运行相同的爬取任务。通用的客户端模式可参考在 Python 中使用住宅代理的指南;对于需要会话一致性的多页面抓取,粘性会话可在该序列期间保持同一 IP。
结论
为 AI 和 LLM 训练采集网络数据受到三方面的制约:模型所需的规模,单个 IP 无法达到;高质量语料库所需的代表性,单一位置无法捕获;以及不断提高的反爬虫防御壁垒,数据中心地址越来越难以突破。住宅代理回答了这三个问题。将爬取任务分散到大型 IP 池,使每个 IP 保持礼貌访问,整体规模随之扩大;定向到特定国家和城市,使语料库反映你真正想要的地理和语言分布;通过干净的家庭级 IP 路由,使请求看起来像普通访客;并通过监控实现故障切换,使持续刷新的爬取任务保持运行。然后做代理无法替你完成的部分:仅采集公开数据,遵守 robots 指令和服务条款,礼貌爬取,并将许可和隐私问题置于采集层之上,由团队自行负责。
这一采集层正是住宅代理的用途所在——一个由真实家庭级 IP 组成的大型 IP 池,支持国家和城市级定向,并在序列需要时提供粘性会话。按 GB 计费意味着你只为实际拉取的数据付费,适合从定向领域爬取到以百万页面计量的语料库等各种规模的工作负载。