对于很多网络数据工作来说,最便宜的爬取就是别人已经做过的那次。Common Crawl 每月免费发布一大批公开网络数据,它支撑着许多用于训练 AI 模型的文本数据集。但它是为广度而建,不是为你特定的来源列表而建,知道它的局限在哪里能为团队节省数周时间。
本指南介绍 Common Crawl 包含什么、不包含什么、如何检查它是否覆盖你需要的页面,以及什么时候值得自己运行爬取。
你能得到什么
Common Crawl 是一家美国非营利组织,其宗旨是向研究人员、公司和个人免费提供互联网的副本。其最新一次爬取 CC-MAIN-2026-43 的数据,采集于 2026 年 10 月 5 日至 18 日之间:
| 页面数 | 21.6 亿 |
| 注册域名 | 3430 万 |
| 主机数 | 4140 万 |
| 之前爬取中未出现过的 URL | 8.301 亿 |
| 未压缩内容 | 371.19 TiB |
| 频率 | 约每月一次爬取 |
| 格式 | WARC(原始响应)、WAT(元数据)、WET(纯文本) |
| 访问方式 | us-east-1 的公开 AWS 存储桶、HTTPS 下载、URL 索引 |
语言分布广泛但不均衡:在该次爬取中,英语占检测到的 HTML 页面的 42.6%,其次是俄语 6.3%,德语 5.8%。
它遗漏了什么
这些限制来自 Common Crawl 自己的文档,它们决定了大多数”自建还是复用”的选择。
- 它是一个样本。 Common Crawl 表示,它通常不会归档整个网站,而是”随机选取其中的一个子集”。不要指望每个产品页面或每篇文章都在其中。
- 没有 JavaScript。 其 FAQ 说明不执行 JavaScript,也不使用 cookie,因此只有在脚本运行后才出现的内容会缺失。
- 没有登录或付费墙内容。 其声明表示不会进入付费墙后面,也不会登录任何网站。
- 它尊重拒绝请求。 CCBot 首先检查 robots.txt 并遵守 crawl-delay。在 10 月的爬取中,4.85% 的抓取请求被 robots.txt 或 403 拒绝,18.47% 被跳过。我们关于网络中有多少部分处于机器人屏蔽之后的分析将这一数字放在了背景中。
- 单一视角。 它从一小组公开地址进行爬取,因此你得到的是每个页面的一种视角。因国家、语言或设备而异的页面只会出现一个版本。
- 它是一个快照。 页面呈现的是采集日期当天的状态,可能已经是数周前的了。
决定前先检查覆盖范围
最快的测试方法是向索引询问你的来源是否在其中。下面的脚本会找到最新的爬取,并查询某个 URL 模式的采集记录。它按照 Common Crawl 的要求,从你自己的连接每次发送一个请求;如需批量查询,请改用 AWS 上的 Parquet URL 索引。该脚本可在 Python 3.9 及更高版本上运行,需要 requests。
from __future__ import annotations
import json
import requests
INDEX = "https://index.commoncrawl.org"
HEADERS = {"User-Agent": "coverage-check/1.0 (contact: data-team@example.com)"}
def latest_crawl():
"""The newest crawl ID, from Common Crawl's own list."""
return requests.get(f"{INDEX}/collinfo.json", headers=HEADERS, timeout=60).json()[0]["id"]
def captures(crawl, url_pattern, limit=1000):
"""Captures of matching URLs in one crawl. One request, no proxies: the index asks for that."""
r = requests.get(f"{INDEX}/{crawl}-index", headers=HEADERS, timeout=120,
params={"url": url_pattern, "output": "json", "limit": limit})
if r.status_code == 404: # no captures at all
return []
r.raise_for_status()
return [json.loads(line) for line in r.text.splitlines()]
if __name__ == "__main__":
crawl = latest_crawl()
rows = captures(crawl, "en.wikipedia.org/wiki/*")
statuses = {}
for row in rows:
statuses[row["status"]] = statuses.get(row["status"], 0) + 1
print(crawl, "captures returned:", len(rows), "by status:", dict(sorted(statuses.items())))
print("first:", rows[0]["url"], rows[0]["timestamp"]) if rows else print("none")
2026 年 11 月 6 日针对英文维基百科上一个模式的输出,结果上限为 1,000 条:
CC-MAIN-2026-43 captures returned: 1000 by status: {'200': 949, '301': 15, '404': 30, '429': 6}
first: https://en.wikipedia.org/wiki/!!! 20261017084408
两件事立刻显现出来。对大型网站的覆盖是真实存在的,但并不完整,所以要针对你自己的模式统计实际结果。而且采集记录带有 Common Crawl 收到的状态码:此处有 30 个是 404,6 个是 429,所以一条采集记录并不总是意味着有内容。使用之前先按状态码过滤。
什么时候免费爬取数据就够用
- 对大范围文本进行训练和研究。 语言建模、分类器和网络规模统计需要的是广度,而非某个特定页面。这正是 Common Crawl 最擅长的领域,我们关于从开放网络构建训练数据集的指南介绍了它仍然需要的过滤和去重工作。
- 发现式工作。 查找哪些域名提到了某个话题、绘制链接图谱或估算网站规模,使用 URL 索引成本很低。
- 历史对比。 追溯多年的月度快照,自己重新创建会很困难。
什么时候需要自己的爬取
- 你需要特定的页面,而且要完整。 样本会漏掉其中一些,而你不会知道漏掉了哪些。
- 你需要新鲜数据。 价格、库存和排名每天都在变化。月度快照只是历史记录。
- 内容需要 JavaScript。 许多现代页面只在浏览器中渲染其数据。
- 你需要本地视角。 价格、搜索结果和广告因国家而异。来自单一视角的爬取只能给出一个答案。按每个市场的访客所见的方式采集数据,正是住宅代理的用途所在。
- 你需要证明数据来源。 自己运行的爬取能让你准确记录每个页面是如何、何时、从何处被抓取的。
许多团队会将两者结合:用 Common Crawl 获取广度和发现能力,用自己的爬虫获取最重要的那些来源。
值得一读的条款
Common Crawl 自己的条款比较简洁,但仍然值得关注。其使用条款说明,被爬取的内容可能受其来源网站条款的约束,用户同意尊重版权和其他权利,并建议在商业用途前寻求法律咨询。使用该内容来开发、训练或部署 AI 系统所产生的索赔责任,也由用户自行承担。自 2025 年起,Common Crawl 还发布了一份法律退出请求登记册,并将受影响的 URL 从后续爬取及其工具中移除。重复使用这些数据并不能让你摆脱这些问题,因此要记录好你使用了哪些数据。
结论
当你需要广度、历史记录或便宜的初步浏览时,Common Crawl 是正确的起点。但当你需要特定页面、新鲜数据、JavaScript 内容或本地视角时,它就不够用了。先用索引检查你的覆盖范围,按状态码过滤采集记录,阅读条款,只在免费样本不够用的地方自己进行爬取。
来源与参考资料
- Common Crawl, FAQ: commoncrawl.org/faq
- Common Crawl, October 2026 crawl archive: commoncrawl.org
- Common Crawl, Terms of Use (last updated 7 March 2024): commoncrawl.org/terms-of-use
- Common Crawl, Get started: commoncrawl.org/get-started
- Common Crawl, URL index: commoncrawl.org/url-index
- Common Crawl statistics, crawl size, languages and crawler metrics: commoncrawl.github.io
- Common Crawl, Opt-out registry (17 September 2025): commoncrawl.org
- Common Crawl, Setting the record straight (4 November 2025): commoncrawl.org