In this Article
机器学习模型的表现取决于其学习的数据质量,而对于大多数团队来说,这些数据来自网络。机器学习数据收集是指将真实世界的样本收集、清洗并结构化为训练数据集,是决定模型成败的关键环节。本指南将从头到尾讲解如何通过网页抓取构建高质量机器学习训练数据集,包括数据质量的标准、分步流程、关键清洗工作、法律边界,以及大规模采集为何需要代理。
我是 Andrii Byzov,一名专注于 AI 领域的兼职首席营销官,致力于为机器学习和分析项目构建网络数据管道。下文将介绍:能够提升模型性能的数据集质量要素、包含代码的实用抓取到数据集工作流,以及住宅代理如何让数据采集具备可扩展性和多样性。
关键事实
- 质量、去重和标签准确性通常比原始数据量更重要。 一个干净、多样且标注良好的数据集,往往能训练出比更大但噪声更多的数据集更好的模型。不过,在质量得到保障后,规模仍然有帮助。
- 网络是许多机器学习数据集的常见来源,文本、图片、价格、评论、列表,在没有合适的 API、授权数据源或开放数据集时,通过抓取来收集。
- 对于对地理位置敏感的任务,请使用区域感知的数据收集。 当语言、定价或可用性会因地点而异时,从多个地区提取样本(通过地理定位代理)可以避免数据集出现偏差。
- 对限速网站进行大规模抓取通常会使用代理。 单个 IP 很快会被限制访问,因此大规模收集往往依赖轮换住宅 IP,但代理并不能让你免于遵守网站条款。
- 你如何获取数据在法律上很重要。 在 Bartz v. Anthropic (2025) 中,法院认定在该案事实下使用合法获取的书籍进行训练属于合理使用,但驳回了使用盗版副本构建资料库的合理使用主张。数据来源也是合规的一部分。
什么样的训练数据集才算优秀?
在抓取任何内容之前,先明确你的目标。高质量的训练数据集具备五个特征:
- 相关性:样本应与任务相匹配,也应反映模型在生产环境中会遇到的数据分布。
- 多样性:来源、地区和边缘案例应足够多样,让模型能够泛化,而非死记某一类样本。
- 干净的标签:准确且一致的标注;标签噪声会限制你可达到的准确率上限。
- 平衡性:类别和细分群体以合理比例呈现,而不是被最容易抓取的内容主导。
- 新鲜度:数据足够新,使其中的模式仍然有效,并且有计划随着现实变化进行更新。
大多数”数据更多却没有帮助”的问题,都源于上述某项特征不足:通常是重复数据、标签噪声,或数据集偏向单一来源。本指南重点讨论这一角度。如需从代理选型的角度了解更多信息,请参阅 适用于 ML 训练的最佳代理;如需了解常见陷阱,请参阅 团队在收集 AI 训练数据时反复出现的错误。
如何通过网页抓取构建训练数据集
步骤 1. 定义 schema 和标签。 在收集之前确定具体字段和标签集,即每个样本包含什么内容以及如何标注。从模型任务反推,可以避免收集到无法使用的数据。
步骤 2. 大规模寻找来源并抓取。 确定包含所需样本的网站并进行抓取,通过代理路由以获得更大的规模和区域多样性。收集时,请为每个样本记录其来源并添加标签。
import requests
from bs4 import BeautifulSoup
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}
# Rotating residential proxies: scale collection without IP blocks, and pull
# region-diverse examples so the dataset isn't skewed to one location.
proxies = {"http": "http://LOGIN__cr.us;sid.ml1:[email protected]:823",
"https": "http://LOGIN__cr.us;sid.ml1:[email protected]:823"}
def collect(urls, label):
"""Scrape raw text examples and tag each with its source + label."""
rows = []
for url in urls:
try:
r = requests.get(url, headers=HEADERS, proxies=proxies, timeout=30)
r.raise_for_status()
except requests.RequestException:
continue
text = BeautifulSoup(r.text, "html.parser").get_text(" ", strip=True)
rows.append({"text": text, "label": label, "source": url})
return rows
步骤 3. 清洗并去重。 原始抓取数据通常噪声较多,也常含有重复内容;这些重复内容很容易导致模型产生偏差和过拟合。首先删除空样本和过短样本,规范化文本,并在其他任何操作之前移除完全重复(以及近似重复)的内容。
import hashlib, re
def clean(t):
return re.sub(r"\s+", " ", t).strip().lower()
def dedup(rows, min_len=40):
"""Drop empties, too-short samples, and exact duplicates — noisy,
duplicated data is the fastest way to a biased, overfit model."""
seen, out = set(), []
for row in rows:
text = row["text"]
if not text or len(text) < min_len:
continue
key = hashlib.sha1(clean(text).encode()).hexdigest()
if key in seen:
continue
seen.add(key)
out.append(row)
return out
urls = ["https://example.com/a", "https://example.com/b"] # your source list
dataset = dedup(collect(urls, label="positive"))
print(f"{len(dataset)} deduplicated examples")
步骤 4. 标注并结构化。 采用一致的标注规则:在可行的情况下以编程方式完成(弱监督、启发式方法),并对样本进行人工审核,以衡量标签质量。将数据集存储为结构化、版本化的格式(JSONL/Parquet),以便复现训练过程。
步骤 5. 验证质量。 在训练前检查类别平衡、来源分布和明显偏差。一次快速审计:按类别、地区、来源分别统计样本数量:可以发现那些会在不知不觉中损害模型性能的偏差。
为什么代理对 ML 数据收集很重要
没有代理时,两个问题会阻碍大规模机器学习数据收集。数据量:训练数据集需要成千上万到数百万个样本,而网站会对高强度爬取进行速率限制和封禁,单个 IP 很快就会被阻断。多样性:如果每个样本都来自同一个位置,数据集就会继承这种偏差,因此你需要从多个地区获取样本。DataImpulse 住宅代理($1/GB,轮换,195 个国家/地区)在这两方面都有帮助:大型轮换池可以支撑数据量,地理定位则能为对地理位置敏感的任务获取区域多样化的样本。不过,代理可以协助收集数据,却不能取代对网站条款的遵守。如需了解从网络收集数据的完整背景,请参阅我们的alternative data指南。
为 ML 训练抓取数据是否合法?
数据收集和模型训练是两个独立的法律问题。收集:通常规则适用:公开、非个人数据通常风险较低,但仍取决于版权、网站条款、访问控制和隐私法律;应避免登录后才能访问的内容、个人数据以及绕过访问控制。训练:在 Bartz v. Anthropic (2025) 中,美国法院认定,在该案事实下,使用合法获取的图书进行训练属于合理使用,但驳回了通过盗版副本建立资料库的合理使用抗辩。因此,你如何获得数据与如何使用数据同样重要。保持来源清晰,尊重 robots.txt 和网站条款,并为商业模型咨询法律顾问。完整框架请参阅whether web scraping is legal。本文为一般信息,并非法律建议。
常见问题
什么是机器学习数据收集?
这是将真实世界的示例收集、清洗并结构化为模型可用于训练的数据集的过程。对大多数团队来说,主要来源是公共网络,文本、图片、价格、评论、商品列表,在没有 API 或授权数据源时,通过网页抓取获得,然后进行去重、标注和验证。
训练模型需要多少数据?
这取决于任务和模型,但质量与多样性比原始数量更重要。一个更小但干净、均衡、标注良好的数据集,通常胜过一个更大但噪声很多的数据集。在追求数据量之前,应优先去除重复项和标签噪声,并覆盖模型在生产环境中会遇到的场景。
为什么去重对训练数据如此重要?
重复数据会让被重复的内容权重过高,从而使模型产生偏差,并虚高评估分数(同一个样本可能同时出现在训练集和测试集中)。去除完全重复和近似重复的数据,是影响最大的清洗步骤之一,它能提升泛化能力,并让你的指标更可信。
抓取 ML 训练数据需要代理吗?
如果要从会按 IP 限速的网站大规模抓取数据,通常需要代理,构建数据集意味着大量请求,而单个 IP 很快就会被限制。轮换住宅代理可以维持抓取规模,并让你获取区域多样化的样本,不过,它们不能让你免于遵守网站条款,因此仍应负责任地收集数据。(API、授权数据源,或 Common Crawl 等开放数据集,有时可以完全避免抓取。)
抓取数据来训练模型合法吗?
数据收集和模型训练是两个不同的问题。收集公开的非个人数据通常风险较低(但并不自动意味着没问题,版权、ToS、访问控制和隐私法仍然适用);应避免登录、个人数据以及绕过控制措施。对于训练,Bartz v. Anthropic (2025) 在该案事实下认定使用合法取得的书籍进行训练属于合理使用,但对盗版书库不予认可,数据来源很重要。请尊重网站条款,并就商业用途寻求法律顾问意见。非法律建议。
结论
构建高质量训练数据集是一个持续流程,而不是一次性下载:先定义数据模式,再从合适的来源大规模抓取数据,严格去重和清洗,保持标注一致,并检查数据平衡性与偏差。网络承载着大量数据,因此具备地域多样性、高容量和稳定访问能力的采集层,是后续工作的基础,这正是住宅代理能够提供的支持。保持来源清晰,并始终关注法律边界,才能让机器学习数据采集产出模型真正可用的训练数据集。关于基础设施,请参阅 适用于 ML 训练的最佳代理 和 适用于网页抓取的最佳代理。
最后更新:2026 年 6 月 25 日。
