Wikipedia:Database download

维基百科向感兴趣的用户提供所有可用内容的免费副本。这些数据库可用于镜像、个人使用、非正式备份、离线使用或数据库查询(例如用于Wikipedia:Maintenance)。所有文本内容均根据 Creative Commons Attribution-ShareAlike 4.0 License (CC-BY-SA) 授权,并且大部分还根据 GNU Free Documentation License (GFDL) 授权。[1] 图像和其他文件根据不同的条款提供,详情请参见其描述页面。有关遵守这些许可的建议,请参阅 Wikipedia:Copyrights

1 离线 Wikipedia 阅读器

以下是一些离线阅读 Wikipedia 的方法:

其中一些是移动应用程序——请参阅“List of Wikipedia mobile applications”。

2 在哪里可以获取转储文件?

2.1 英文 Wikipedia

2.2 其他 Wikipedia 版本

3 我应该获取 multistream 吗?

TL;DR : 获取 MULTISTREAM 版本!(以及相应的索引文件,_pages-articles-multistream-index.txt.bz2_)

_pages-articles.xml.bz2_ 和 _pages-articles-multistream.xml.bz2_ 都包含相同的 _xml_ 内容。因此,如果您解压缩其中任何一个,您将获得相同的数据。但是,使用 multistream,可以在不解压缩整个文件的情况下从存档中获取文章。您的阅读器应该为您处理此问题;如果您的阅读器不支持它,它仍然可以工作,因为 multistream 和非 multistream 包含相同的 _xml_。multistream 的唯一缺点是它稍微大一些。您可能会想获取较小的非 multistream 存档,但如果您不解压缩它,这将毫无用处。它会解压缩到大约 5-10 倍的原始大小。捡了芝麻,丢了西瓜。获取 multistream。

请注意,multistream 转储文件包含多个 bz2“流”(bz2 标头、正文、页脚),这些流连接成一个文件,而原始文件包含一个流。multistream 转储中的每个单独的“流”(或实际上是文件)包含 100 页,最后一个可能除外。

3.1 如何使用 multistream?

对于 multistream,您可以获取索引文件 _pages-articles-multistream-index.txt.bz2_。此索引的第一个字段是要搜索到压缩存档 _pages-articles-multistream.xml.bz2_ 中的字节数,第二个是文章 ID,第三个是文章标题。

使用索引中找到的字节偏移量,使用 dd 从存档中剪切一小部分。然后,您可以选择使用 bzip2 解压缩它,也可以使用 bzip2recover,并在第一个文件中搜索文章 ID。

请参阅 https://docs.python.org/3/library/bz2.html#bz2.BZ2Decompressor,了解有关此类 multistream 文件以及如何使用 Python 解压缩它们的信息;另请参阅 https://gerrit.wikimedia.org/r/plugins/gitiles/operations/dumps/+/ariel/toys/bz2multistream/README.txt 及相关文件,了解旧的工作玩具。

3.2 其他语言

dumps.wikimedia.org 目录中,您会找到最新的 SQL 和 XML 转储文件,不仅适用于英语项目。子目录以语言代码和相应的项目命名。还存在一些其他目录(例如 simple、nostalgia),具有相同的结构。这些转储文件也可以从 Internet Archive 获得。

4 上传的文件(图像、音频、视频等)在哪里?

除了直接从 Wikimedia 服务器提供之外,图像和其他上传的媒体也可以从镜像站点获得。截至 2013 年 9 月,可以从镜像站点批量下载,但 Wikimedia 服务器不直接提供。请参阅 当前镜像站点列表。您应该从镜像站点使用 rsync,然后从 upload.wikimedia.org 填充缺失的图像;从 upload.wikimedia.org 下载时,您应该将自己限制为每秒 1 个缓存未命中(您可以检查响应的标头,以查看是否命中或未命中,并在收到未命中时回退),并且不应使用超过 1 或 2 个并发 HTTP 连接。在任何情况下,请确保您拥有包含联系信息(电子邮件地址)的准确 user agent 字符串,以便运维人员可以在出现问题时与您联系。您应该从 MediaWiki API 获取校验和并验证它们。API Etiquette 页面包含一些指南,尽管并非所有指南都适用(例如,由于 upload.wikimedia.org 不是 MediaWiki,因此没有 maxlag 参数)。

与大多数文章文本不同,图像不一定根据 GFDL & CC-BY-SA-4.0 授权。它们可能根据许多 free licenses之一、public domain、被认为是 fair use,甚至侵犯了版权(应该删除)。特别是,在 Wikipedia 或类似作品的上下文之外使用合理使用图像可能是非法的。大多数许可下的图像都需要署名,并且可能需要其他附加的版权信息。此信息包含在图像描述页面中,这些页面是可从 dumps.wikimedia.org 获得的文本转储文件的一部分。总之,下载这些图像的风险由您自行承担(Legal)。

5 处理压缩文件

压缩的转储文件经过大量压缩,因此解压缩后会占用大量驱动器空间。comparison of file archivers 中描述了大量的解压缩程序。以下程序尤其可用于解压缩 bzip2、.bz2.zip.7z 文件。

Windows

Windows XP 开始,基本的解压缩程序可以解压缩 zip 文件。[2][3] 除此之外,以下程序可用于解压缩 bzip2 文件。

Macintosh (Mac)

GNU/Linux

Berkeley Software Distribution (BSD)

注意事项

  1. 某些旧版本的 bzip2 可能无法处理大于 2 GB 的文件,因此如果遇到任何问题,请确保您拥有最新版本。
  2. 某些旧存档使用 gzip 压缩,它与 PKZIP(最常见的 Windows 格式)兼容。

6 处理大型文件

随着文件大小的增加,它们超出计算设备某些限制的可能性也会增加。每个操作系统、文件系统、硬盘存储设备和软件(应用程序)都有最大文件大小限制。每个操作系统、文件系统、硬盘存储设备和软件(应用程序)都有最大文件大小限制。这些的最大值可能各不相同,并且所有限制中的最低限制将成为存储设备的文件大小限制。

计算设备中的软件越旧,系统中的某个位置就越有可能存在 2 GB 的文件限制。这是因为旧软件使用 32 位整数进行文件索引,这会将文件大小限制为 2^31 字节 (2 GB)(对于有符号整数)或 2^32 (4 GB)(对于无符号整数)。旧的 C 编程库 有这个 2 或 4 GB 的限制,但较新的文件库已转换为 64 位整数,因此支持最大 2^63 或 2^64 字节(8 或 16 EB)的文件大小。

在开始下载大型文件之前,请检查存储设备以确保其文件系统可以支持如此大的文件,检查可用空间量以确保其可以容纳下载的文件,并确保您将使用的存储设备的设备能够读取您选择的文件系统。

6.1 文件系统限制

文件系统有两个限制:文件系统大小限制和文件系统限制。一般来说,由于文件大小限制小于文件系统限制,因此更大的文件系统限制没有意义。很大一部分用户认为他们可以创建最大为其存储设备大小的文件,但他们的假设是错误的。例如,格式化为 FAT32 文件系统的 16 GB 存储设备对任何单个文件都有 4 GB 的文件限制。以下是最常见的文件系统列表,有关其他详细信息,请参阅 Comparison of file systems

Windows

Macintosh (Mac)

Linux

FreeBSD

FreeBSD 和其他 BSD

6.2 操作系统限制

每个操作系统都有用于文件大小和驱动器大小的内部文件系统限制,这独立于文件系统或物理介质。如果操作系统的任何限制低于文件系统或物理介质,则 OS 限制将是真正的限制。

Windows

Linux

Android: Android 基于 Linux,后者决定其基本限制。

Apple iOS(请参阅 List of iPhone models

6.3 提示

6.3.1 检测损坏的文件

检查 MD5 校验和(在下载目录的文件中提供)以确保下载完整且准确非常有用。这可以通过对下载的文件运行“md5sum”命令来检查。鉴于它们的大小,这可能需要一些时间来计算。由于存储文件的技术细节,_文件大小_在不同的文件系统上可能会报告不同,因此不一定可靠。此外,下载过程中可能发生了损坏,尽管这种可能性很小。

6.3.2 Linux 和 Unix

如果您似乎达到了 2 GB 的限制,请尝试使用 wget 版本 1.10 或更高版本、cURL 版本 7.11.1-1 或更高版本,或者最新版本的 lynx(使用 -dump)。此外,您可以恢复下载(例如 wget -c)。

7 为什么不只是在运行时从 wikipedia.org 检索数据?

假设您正在构建一个软件,该软件在某些时候显示来自 Wikipedia 的信息。如果您希望您的程序以与实时版本中看到的方式不同的方式显示信息,您可能需要用于输入它的维基代码,而不是完成的 HTML。

此外,如果您想获取所有数据,您可能希望以尽可能有效的方式传输它。wikipedia.org 服务器需要做很多工作才能将维基代码转换为 HTML。这对于您和 wikipedia.org 服务器来说都很耗时,因此简单地抓取所有页面并不是正确的方法。

要一次访问一篇 XML 格式的文章,请访问 Special:Export/Title of the article

有关更多信息,请参阅 Special:Export

请注意,禁止动态从 Wikimedia 服务器加载的 Wikipedia 实时镜像站点。请参阅 Wikipedia:Mirrors and forks

7.1 请勿使用网络爬虫

请勿使用 web crawler 下载大量文章。对服务器进行大量爬取会导致 Wikipedia 速度大幅下降。

7.1.1 阻止爬虫的电子邮件示例

IP 地址 _**nnn.nnn.nnn.nnn**_ 正在以每秒最多 50 页的速度从 wikipedia.org 地址检索。请求之间至少延迟一秒钟是合理的。请尊重该设置。如果您必须稍微超过它,请仅在 **[stats.wikimedia.org#/all-wikipedia-projects](https://en.wikipedia.org/wiki/<https:/stats.wikimedia.org/#/all-wikipedia-projects>)** 上的站点负载图表中显示的非高峰时段执行此操作。值得注意的是,以每秒一次的速度爬取整个站点需要几周时间。始发 IP 现在已被阻止或将很快被阻止。如果您想取消阻止,请与我们联系。请不要尝试规避它——我们只会阻止您的整个 IP 范围。
如果您想了解如何更有效地获取我们的内容,我们提供了多种方法,包括每周数据库转储,您可以将其加载到 MySQL 中并以您认为方便的任何速率在本地进行爬取。一旦您拥有了基础架构,还可以使用工具来为您执行此操作,无论您喜欢多久执行一次。
除了电子邮件回复之外,您可能更喜欢访问 irc.libera.chat 上的 #mediawiki [connect](https://en.wikipedia.org/wiki/<https:/web.libera.chat/?channel=#mediawiki>) 以与我们的团队讨论您的选项。

7.2 对当前数据库转储执行 SQL 查询

您可以使用 Quarry(作为已禁用的 Special:Asksql 页面的替代品)对当前数据库转储执行 SQL 查询。

8 数据库模式

8.1 SQL 模式

参见:mw:Manual:Database layout

用于初始化 MediaWiki 数据库的 SQL 文件可以在这里找到。

8.2 XML 模式

每个转储的 XML 模式在文件顶部定义,并在 MediaWiki export help page 中描述。

9 帮助解析转储以用于脚本

9.1 在 Wikipedi