# 如何从网络收集机器学习训练数据

模型是简单的部分。从开放网络中获取一个干净的、去重的、合法的、可刷新训练集才是项目真正停滞的地方。以下是从头到尾的收集流程。

训练模型通常是简单的部分。阻碍机器学习项目的步骤在上游：从开放网络中组装一个干净的、去重的、合法的、可刷新训练集。获取原始页面很便宜——爬虫可以做到——但将它们转化为可用的行才是真正的工作，这正是本指南所涵盖的：数据来源、清理为结构化文本、去重、采样、授权，以及保持模型不陈旧的刷新管道。

## 从信号开始，而不是从抓取器开始

在编写任何收集代码之前，明确模型需要学习什么以及哪些来源携带该信号。数据有三种形态，每种形态的收集成本不同：结构化（表格、产品提要——易于解析）、半结构化（JSON、CSV、XML端点——通常是网站暴露的最干净的东西）和非结构化（文章文本、评论、论坛帖子）。非结构化内容占所有数据的80-90%，据报道其中只有约0.5%被使用，这正是一个构建良好的网络数据集所能弥补的差距。在扩大规模之前，决定你需要哪种形态。

## 抓取到清理的文本，而不是原始HTML

将原始HTML输入训练管道意味着输入导航、广告、cookie横幅和脚本标签——这些噪音会降低数据集的质量。持久的做法是直接抓取到干净的、结构化的文本。一个返回markdown的[Scraper API](https://quantumproxies.io/scraper-api)会为你去除样板代码，因此数千页的抓取结果是可读的内容，而不是标签混乱：

```python
import requests

def fetch_clean(url):
    r = requests.post(
        "https://api.quantumproxies.io/v1/scraper/extract",
        headers={"Authorization": "Bearer YOUR_API_KEY"},
        json={"url": url, "format": "markdown"},
        timeout=120,
    )
    return r.json()["payload"]["content"]  # boilerplate-stripped markdown

corpus = [fetch_clean(u) for u in seed_urls]
```

Markdown是一个很好的目标，因为它保留了结构（标题、列表、表格），同时去掉了展示层——这也是它成为[RAG管道](https://quantumproxies.io/blog/fresh-web-data-rag-pipelines)和LLM训练的首选输入的原因。通过旋转的住宅IP路由抓取，以免在大规模收集运行中途被整个任务阻止。

![机器学习流水线中负责收集的那一半，从开放网络到训练集：定义信号，爬取为干净的 markdown，按内容哈希去重，带来源信息进行采样和授权，并定期刷新。卡片给出了每一步的规则，这些都在任何建模开始之前完成。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335190/blog/generated/qp-b9-057-diag1.png)
*ML管道的收集部分：建模在此之后，完全依赖于正确的收集。*

## 在污染模型之前去重

近似重复的文档是网络数据集的无声杀手——同一篇文章在十个网站上发布，样板页脚，转发的内容。在这些上训练会过度加权重复的内容。对每个文档的标准化内容进行哈希处理并删除碰撞；对于近似重复，shingle或MinHash方法可以捕捉到精确哈希遗漏的内容：

```python
import hashlib

def content_hash(text):
    norm = " ".join(text.lower().split())  # normalise whitespace/case
    return hashlib.sha256(norm.encode()).hexdigest()

seen, unique = set(), []
for doc in corpus:
    h = content_hash(doc)
    if h not in seen:
        seen.add(h)
        unique.append(doc)
print(f"kept {len(unique)} of {len(corpus)} after dedup")
```

你在这里计算的内容哈希有双重作用——它也是你在下次抓取时检测变化的方式，所以要保留它。

## 有意识地采样，诚实地授权

更多的数据并不自动意味着更好的数据。一个具有代表性的样本胜过一个不平衡的堆——如果你的抓取90%来自一个网站或一种语言，模型就会学到这种偏差。跨你的来源和类别进行分层采样，以便数据集反映你实际想要建模的分布。关于授权：网络数据并不是自动可以用于训练的。根据来源条款进行过滤，在适用的地方遵守robots指令，并在每行旁边保留出处（来源URL和获取日期），以便你可以证明每个示例的来源。我们关于[2026年抓取合法性](https://quantumproxies.io/blog/is-web-scraping-legal-2026)的说明涵盖了个人数据和授权界限（信息性，不是法律建议）。

## 基本事实：网络不会给你的部分

对于监督学习，你需要标签，而开放网络很少会提供它们。有些数据集本身就带有标签（评论旁边的评分，句子中的下一个词），这就是为什么这些数据集可以大规模便宜地收集。其他所有的都需要一个基本事实步骤：由领域专家标注，或通过市场进行众包。如果你进行众包，通过植入已知答案的任务并拒绝未通过的工人来保证质量——这是一个研究得很透彻的失败模式。在可能的情况下，优先选择自然标注的网络数据；这就是一个数据集你可以在一周内构建完成与需要标注预算的区别。

## 刷新，因为数据会变陈旧

收集从来不是一次性的。价格会变化，页面会被重写，新内容会出现——一个在冻结快照上训练的模型会偏离它所要预测的世界。从第一天起就构建刷新：按计划重新抓取，将每页的内容哈希与上次运行进行比较，并且只重新处理实际变化的内容。这样可以使刷新成本与实际变化成比例，而不是每次都重新下载所有内容：

```python
def refresh(url, last_hash):
    text = fetch_clean(url)
    h = content_hash(text)
    if h == last_hash:
        return None          # unchanged, skip re-processing
    return {"url": url, "text": text, "hash": h, "fetched": now()}
```

对于快速变化的领域，或者当你宁愿消费托管的提要而不是自己运行抓取时，[为LLMs构建的网络数据](https://quantumproxies.io/web-data-for-llms)为你提供干净、更新的内容，而无需维护管道。

![网络训练数据背后的数字：非结构化内容占全部数据的 80-90%，据称其中只有约 0.5% 曾被使用，而 70/30 的训练集与留出测试集划分是常见的起点。卡片得出结论：语料几乎无限，价值在于清洗、去重和刷新。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335190/blog/generated/qp-b9-057-diag2.png)
*语料库几乎是无限的；一个好的管道增加的价值在于清理、去重和刷新它。*

[大规模抓取网络以清理markdown](https://quantumproxies.io/scraper-api)

## 常见问题解答

### 你从哪里获取机器学习的训练数据？

三个主要来源：现有的公共数据集（Kaggle、Google Dataset Search、学术语料库）、内部第一方数据，以及通过抓取的开放网络。网络是最大和最新鲜的来源，但需要最多的工作——清理、去重、采样和授权。对于许多现代模型，抓取相关网站以清理markdown是获得一个不存在的领域特定数据集的最快方式。

### 我需要多少训练数据？

这取决于任务和模型，诚实的答案是：从小规模开始，直到性能达到平台期。训练一个具有代表性的样本，在保留的测试集上测量准确性（70/30拆分是一个常见的起点），然后添加更多数据，观察指标是否继续改善。质量和代表性通常比原始体量更重要。

### 抓取网络数据用于ML训练合法吗？

收集公共数据在大范围内是可辩护的，但训练用途引发了授权问题，以及涉及个人数据时的隐私问题。根据来源条款进行过滤，避免不需要的个人数据，为每个示例保留出处，并在适用的地方尊重robots指令。这是一般信息，不是法律建议——对于大规模的商业数据集，请咨询法律顾问。

### 如何保持训练数据集的新鲜？

安排重新抓取并使用内容哈希检测变化，只重新处理实际移动的页面。对数据集进行版本控制，以便你可以重现哪个快照训练了哪个模型，并在每行上保留获取日期。增量的、基于变化检测的刷新使成本与实际变化成比例，而不是每个周期都重新下载整个语料库。

模型获得了头条，但数据集决定了结果。获取正确的信号，抓取到清理的markdown，严格去重，诚实采样，保留出处，并从一开始就构建刷新。做好收集管道，后续的一切都会变得更容易。如果你特别想要进行微调，我们关于[从网络构建微调数据集](https://quantumproxies.io/blog/build-fine-tuning-dataset-from-web)的指南在这里接着讲。

[为你的模型获取更新的网络数据](https://quantumproxies.io/web-data-for-llms)
