网络数据已经成为一种常见的研究材料。社会科学家研究平台话语,经济学家追踪在线价格,计算机科学家构建语料库,公共卫生研究者追踪错误信息。其中大部分数据是用爬虫收集的,也大多存在相同的缺陷:团队之外没有人能够复现这一收集过程,伦理审查是为问卷调查设计的,数据集的引用方式要么是”作者收集的数据”,要么根本没有引用。
这些都并非不可避免。少数几个做法,其中大多数成本低廉,就能让爬取的数据变得可复现、可审查、可引用。本指南将介绍如何设计一个经得起同行评审的收集流程、伦理委员会需要看到什么、如何打包和引用数据集,以及一个经过测试的小脚本,用于生成引用文件和清单文件。
要点总结
- 网络在变化,且因访问者而异,因此重新运行爬虫并不能复现一个已爬取的数据集。可复现性意味着准确记录收集了什么、何时收集、从哪里收集、如何收集,并将其保存下来。
- 在收集之前先编写收集协议,并像对待其他方法一样,把对协议的更改当作修订来处理。
- 网络数据的伦理审查取决于预期、伤害和可识别性,而不仅仅取决于数据是否公开。要准备的是数据管理计划,而不仅仅是同意豁免书。
- 用文件哈希清单和收集背景、许可协议以及CITATION.cff文件打包数据集,然后将其存放在能获得持久标识符的地方。
- 把数据集作为一个独立的研究产出来引用,附上版本号和标识符,与论文并列。
为什么爬取的数据难以复现
一年后重新运行同样的代码,并不会产生相同的数据。网页会变化、消失、迁移。许多网站会根据国家、语言、设备或登录状态显示不同的内容。平台会更改其标记结构和访问规则。而收集过程本身就是有损的:屏蔽、超时和速率限制会不均匀地丢失记录,这种丢失方式往往与所研究的对象本身存在相关性。
因此,网络数据的可复现性依赖于三件事,而不是重新收集:
- 文档记录方法要足够详细,使他人能够尝试相同的收集,并理解为何结果会有差异。
- 保存实际收集到的内容,理想情况下包括原始响应以及提取出的数据。
- 说明未被收集到的内容:失败、排除和筛选情况,并附带数量统计。
像设计仪器一样设计收集过程
把爬虫当作一种测量仪器,在收集开始之前就写好它的协议:
| 协议要素 | 需要记录的内容 |
|---|---|
| 总体与抽样 | 数据来源是什么,如何选定,以及范围的边界是什么 |
| 收集时间窗口 | 以UTC表示的开始和结束日期时间,以及重复收集的时间表 |
| 观察点 | 采集方所呈现的国家、网络类型、语言和设备配置,因为许多网站会据此而有所不同 |
| 工具 | 代码仓库及提交版本、库版本、所用浏览器版本(如有) |
| 访问规则 | robots.txt、服务条款和速率限制是如何处理的,以及请求节奏 |
| 失败处理 | 重试机制、什么情况算作失败记录,以及失败如何被记录 |
| 处理过程 | 提取、清洗、去重和筛选步骤,每一步前后都附带数量统计 |
其中有两项在论文中经常缺失。观察点很重要,因为同一个URL可能会向不同访问者返回不同内容,我们在关于观察点标准的论述中主张,这应当作为标准记录下来。失败数量也很重要,因为如果一个数据集缺失了8%的记录,只有读者知道缺失的是哪8%,数据才具有可解释性。
在研究条件允许的情况下,除了提取出的数据外,还应保留原始响应。按照保存原始响应中所述,以标准的WARC格式存储这些响应,可以让你和后续研究者在发现解析器出错时,从当时实际收集到的内容中重新提取数据。
伦理审查
许多机构的伦理审查流程是围绕参与者同意设计的,而网络数据并不完全符合这种框架。研究者常常主张公开数据无需审查;而伦理委员会往往以针对访谈设计的要求来回应。更好的讨论应从真正重要的问题出发。互联网研究者协会的伦理指南于2019年批准发布第三版,将互联网研究伦理的框架建立在数据分享时所处的情境和整个研究生命周期中潜在伤害之上,而不是建立在”公开”或”私密”的标签上。
网络数据的伦理申请应回答以下问题:
- 这是谁的数据,他们的预期是什么? 一家公司的价目表、一位政治人物的公开言论和一个青少年的论坛帖子都是”公开的”,但预期却大不相同。
- 人们是否可能被识别出来,无论是直接识别还是通过信息组合识别? 引述内容可能被反查回其作者;汇总多个来源可能识别出单一来源无法识别的人。
- 可能造成什么伤害,伤害到谁? 要考虑曝光、骚扰和歧视,尤其是针对弱势群体或敏感话题。
- 数据将如何被最小化和保护? 哪些内容不被收集,标识符如何被假名化,谁有访问权限,数据存储在哪里,何时被删除。
- 将发布什么内容? 是汇总数据、改述的引述,还是原始记录;以及共享的数据集是否需要访问控制。
服务条款和法律是与伦理相独立的问题,二者都需要得到解答。Fiesler、Beard和Keegan在2020年ICWSM发表的一项研究中,审查了一百多个社交媒体网站服务条款中的数据收集条款,并指出单凭服务条款本身,无论支持还是反对,都不足以作为伦理决策的依据。在法律层面,研究用途通常享有特定条款;例如,欧盟版权法就包含针对研究机构进行文本和数据挖掘的例外规定,而数据保护法适用于个人数据,无论其是否公开。我们关于网络爬取是否合法和GDPR与数据收集的概述可作为起点;你所在机构的法律和数据保护官员才是你项目的权威依据。
robots.txt在每份协议中都值得单独一提。它不是法律,但它是网站意愿最清晰的机器可读声明,遵守它很容易站得住脚;robots.txt、AI退出选项与预留信号介绍了这些信号的含义。
打包数据集
一个可以被引用和复用的数据集,需要的不仅仅是数据文件本身:
- 一份清单,列出每个文件及其大小和加密哈希值,以及来自协议的收集背景信息。哈希值让任何人都能确认自己拿到的文件与论文中使用的文件完全一致。
- 一份README,描述字段含义、方法、已知缺陷以及如何负责任地使用这些数据。
- 一份许可协议,说明你被允许分享的内容,以及清楚说明哪些内容无法分享及其原因。
- 一份CITATION.cff文件,这是GitHub、Zenodo和文献管理工具都能读取的纯文本引用文件格式,使任何人都能一键正确引用该数据集。
下面的函数根据一个数据文件夹和收集情况的描述,写出清单和CITATION.cff:
import hashlib
import json
from datetime import date
from pathlib import Path
def sha256(path):
digest = hashlib.sha256()
with open(path, "rb") as f:
for block in iter(lambda: f.read(1 << 20), b""):
digest.update(block)
return digest.hexdigest()
def write_dataset_package(folder, title, authors, collection, version="1.0.0"):
"""Write a manifest (what was collected, how, and file hashes) and a CITATION.cff for a scraped dataset."""
folder = Path(folder)
files = sorted(p for p in folder.rglob("*") if p.is_file() and p.name not in ("MANIFEST.json", "CITATION.cff"))
manifest = {
"title": title,
"version": version,
"collection": collection, # sources, window, vantage point, tool and code version, robots policy
"files": [{"path": str(p.relative_to(folder)), "bytes": p.stat().st_size, "sha256": sha256(p)} for p in files],
}
(folder / "MANIFEST.json").write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8")
lines = [
"cff-version: 1.2.0",
'message: "If you use this dataset, please cite it as below."',
"type: dataset",
f"title: {json.dumps(title)}",
f"version: {json.dumps(version)}",
f"date-released: {date.today().isoformat()}",
"authors:",
]
for person in authors:
lines.append(f" - family-names: {json.dumps(person['family'])}")
lines.append(f" given-names: {json.dumps(person['given'])}")
if person.get("orcid"):
lines.append(f" orcid: {json.dumps(person['orcid'])}")
abstract = (f"Collected {collection['window']} from {', '.join(collection['sources'])}. "
"See MANIFEST.json for method and file hashes.")
lines.append(f"abstract: {json.dumps(abstract)}") # JSON strings are valid YAML, so quotes cannot break the file
(folder / "CITATION.cff").write_text("\n".join(lines) + "\n", encoding="utf-8")
return manifest
在一个小型示例数据集上使用:
from package import write_dataset_package
manifest = write_dataset_package(
"dataset",
title="Robots.txt rules for AI crawlers on the top 10,000 domains",
authors=[{"family": "Example", "given": "Researcher", "orcid": "https://orcid.org/0000-0002-1825-0097"}],
collection={
"sources": ["robots.txt files of the Tranco top 10,000 domains"],
"window": "on 6 October 2026",
"vantage_point": "one network in Romania",
"tool": "survey.py at commit 3f2a9c1",
"robots_policy": "only robots.txt itself was requested",
},
)
print(len(manifest["files"]), "files listed")
示例中的ORCID是ORCID官方发布的示例标识符;使用时请替换为你自己的。我们用该格式的参考工具cffconvert验证了生成的文件,它报告”Citation metadata are valid according to schema version 1.2.0”,并确认当标题和姓名中含有引号和撇号时文件依然有效,而简单的模板在这种情况下往往会出错。该工具针对示例生成的APA风格输出为:“Example R. (2026). Robots.txt rules for AI crawlers on the top 10,000 domains (version 1.0.0).”
存放与引用
存放在实验室文件夹或个人GitHub仓库中的数据集可能会消失。应将其存放在能够颁发持久标识符的仓库中:
- 通用仓库,例如由CERN运营的Zenodo,会为每次上传颁发DOI,免费提供,单个记录的标准限制为50 GB。
- 机构和学科仓库可能是资助方要求使用的,或者在你所在领域能提供更好的发现度。
- 受限访问是当数据无法完全公开时的一种选择:公开存放清单和文档,而数据本身采用受控访问。
FAIR原则于2016年发表在Scientific Data期刊上,概括了存放应达成的目标:数据应当是可发现的、可访问的、可互操作的、可复用的,无论是对人还是对机器而言。
然后,在论文中把数据集作为一个独立的参考文献来引用,包含作者、年份、标题、版本、仓库和标识符,而不仅仅是方法部分中的一句话。要引用你所分析的确切版本,当数据发生变化时,发布带有新标识符的新版本。
一份检查清单
- 在收集之前写好协议,包含抽样、时间窗口、观察点、工具、访问规则和失败处理。
- 伦理申请涵盖预期、可识别性、伤害、最小化和发布。
- 在研究条件允许的情况下保留原始响应,并统计每一个处理步骤的数量。
- 带有文件哈希和收集背景的清单、README、许可协议和CITATION.cff。
- 存放于能获得持久标识符的仓库,并在论文中附上带版本号的数据集引用。
同样的严谨性在学术界之外也适用;构建大规模训练数据集介绍了这一做法在机器学习语料库中的应用。
结论
爬取的数据完全可以成为严谨的研究材料,但前提是要把它当作研究材料来对待:按照书面协议进行收集,根据其所处情境而非公开与否的标签进行伦理审查,保存足够的细节以说明观察到了什么,并作为可引用、带版本号的产出发布出来。
这其中大部分工作是文档记录和打包,只需在开始时和结束时各做一次。这正是一个只能支撑一篇论文的数据集,和一个能够支撑一个领域的数据集之间的区别。
来源与参考文献
- Association of Internet Researchers, Internet Research: Ethical Guidelines 3.0, 2019.
- Wilkinson et al., The FAIR Guiding Principles for scientific data management and stewardship, Scientific Data, 2016.
- Fiesler, Beard and Keegan, No Robots, Spiders, or Scrapers: Legal and Ethical Regulation of Data Collection Methods in Social Media Terms of Service, ICWSM 2020.
- Citation File Format, version 1.2.0, and the cffconvert validator.
- Zenodo, operated by CERN.
- Code tested by Shifter on 6 October 2026.