Wikipedia 数据库下载指南
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 的方法:
- Kiwix: (§ Kiwix) – 图像索引 (2024)
- XOWA: (§ XOWA) – 图像索引 (2015)
- WikiTaxi: § WikiTaxi (for Windows)
- aarddict: § Aard Dictionary / Aard 2
- BzReader: § BzReader and MzReader (for Windows)
- WikiFilter: § WikiFilter
- Wikipedia on rockbox: § Wikiviewer for Rockbox
- 精选的 Wikipedia 文章,以打印文档的形式:Help:Printing
其中一些是移动应用程序——请参阅“List of Wikipedia mobile applications”。
2 在哪里可以获取转储文件?
2.1 英文 Wikipedia
- 来自任何 Wikimedia Foundation 项目的转储文件:dumps.wikimedia.org 和 Internet Archive
- 英文 Wikipedia 的 SQL 和 XML 转储文件:dumps.wikimedia.org/enwiki/ 和 Internet Archive
- 下载 使用 BitTorrent 客户端的数据转储文件(Torrent 有很多好处,可以减少服务器负载,节省带宽成本)。
- pages-articles-multistream.xml.bz2 – 仅当前版本,无讨论页或用户页;这可能就是您想要的,压缩后超过 19 GB(解压缩后扩展到超过 86 GB)。
- pages-meta-current.xml.bz2 – 仅当前版本,所有页面(包括讨论页)
- abstract.xml.gz – 页面摘要
- all-titles-in-ns0.gz – 仅文章标题(带有重定向)
- 页面和链接的 SQL 文件也可用
- 所有版本,所有页面:这些文件会扩展到数 TB 的文本。请仅在您知道可以处理此数量的数据时才下载这些文件。 转到 Latest Dumps 并查找所有名称中包含“pages-meta-history”的文件。
- 要下载 XML 格式的数据库子集,例如特定类别或文章列表,请参阅:Special:Export,其用法在 Help:Export 中描述。
- Wiki 前端软件:MediaWiki [1]。
- 数据库后端软件:MySQL。
- 图像转储文件:见下文。
2.2 其他 Wikipedia 版本
- Wikipedia 的 SQL 和 XML 转储文件:dumps.wikimedia.org
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 XP 开始,基本的解压缩程序可以解压缩 zip 文件。[2][3] 除此之外,以下程序可用于解压缩 bzip2 文件。
Macintosh (Mac)
- macOS 附带命令行 bzip2 工具。
GNU/Linux
- 大多数 GNU/Linux 发行版都附带命令行 bzip2 工具。
Berkeley Software Distribution (BSD)
- 某些 BSD 系统附带命令行 bzip2 工具作为操作系统的一部分。其他系统(例如 OpenBSD)将其作为必须首先安装的软件包提供。
注意事项
- 某些旧版本的 bzip2 可能无法处理大于 2 GB 的文件,因此如果遇到任何问题,请确保您拥有最新版本。
- 某些旧存档使用 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。
- FAT16 支持最大 4 GB 的文件。FAT16 是较小 USB 驱动器和所有 2 GB 或更小的 SD cards 的出厂格式。
- FAT32 支持最大 4 GB 的文件。FAT32 是较大 USB 驱动器和所有 4 GB 或更大的 SDHC 卡的出厂格式。
- exFAT 支持最大 127 PB 的文件。exFAT 是所有 SDXC 卡的出厂格式,但由于许可问题,与大多数 UNIX 版本不兼容。[citation needed]
- NTFS 支持最大 16 TB 的文件。NTFS 是现代 Windows 计算机的默认文件系统,包括 Windows 2000、Windows XP 及其所有后续版本。如果使用更大的簇大小格式化文件系统,Windows 8 之后的版本可以支持更大的文件。
- ReFS 支持最大 16 EB 的文件。
Macintosh (Mac)
- HFS Plus (HFS+)(也称为 Mac OS Extended)支持最大 8 EiB(8 exbibytes)(2^63 字节)的文件。[4] Exbibyte 类似于 exabyte。 macOS 10.2+ 和 iOS 支持 HFS Plus。它是 macOS 计算机的默认文件系统,直到 2017 年发布 macOS High Sierra 时,它被 Apple File System APFS 取代为默认文件系统。
- APFS 支持最大 8 exbibytes(2^63 字节)的文件。[4]
- ext2 和 ext3 支持最大 16 GB 的文件,但使用更大的块大小最大支持 2 TB。有关更多信息,请参阅 https://users.suse.com/~aj/linux_lfs.html。
- ext4 支持最大 16 TB 的文件,使用 4 KB 块大小。(在 e2fsprogs-1.42 (2012) 中删除了限制)
- XFS 支持最大 8 EB 的文件。
- ReiserFS 支持最大 1 EB 的文件,在 32 位系统上支持 8 TB。
- JFS 支持最大 4 PB 的文件。
- Btrfs 支持最大 16 EB 的文件。
- NILFS 支持最大 8 EB 的文件。
- YAFFS2 支持最大 2 GB 的文件
- ZFS 支持最大 16 EB 的文件。
FreeBSD 和其他 BSD
- Unix File System (UFS) 支持最大 8 ZiB 的文件。
6.2 操作系统限制
每个操作系统都有用于文件大小和驱动器大小的内部文件系统限制,这独立于文件系统或物理介质。如果操作系统的任何限制低于文件系统或物理介质,则 OS 限制将是真正的限制。
- Windows 95、98、ME 对所有文件大小都有 4 GB 的限制。
- Windows XP 对所有文件大小都有 16 TB 的限制。
- Windows 7 对所有文件大小都有 16 TB 的限制。
- Windows 8、10 和 Server 2012 对所有文件大小都有 256 TB 的限制。
- 32 位内核 2.4.x 系统对所有文件系统都有 2 TB 的限制。
- 64 位内核 2.4.x 系统对所有文件系统都有 8 EB 的限制。
- 没有选项 CONFIG_LBD 的 32 位内核 2.6.x 系统对所有文件系统都有 2 TB 的限制。
- 具有选项 CONFIG_LBD 的 32 位内核 2.6.x 系统和所有 64 位内核 2.6.x 系统对所有文件系统都有 8 ZB 的限制。[5]
Android: Android 基于 Linux,后者决定其基本限制。
- 内部存储:
- 外部存储插槽:
- 所有 Android 设备都应支持 FAT16、FAT32、ext2 文件系统。
- Android 2.3 及更高版本支持 ext4 文件系统。
Apple iOS(请参阅 List of iPhone models)
- 所有设备都支持 HFS Plus (HFS+) 用于内部存储。没有设备具有外部存储插槽。10.3 或更高版本上的设备运行 Apple File System,支持最大 8 EB 的文件大小。
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 模式
用于初始化 MediaWiki 数据库的 SQL 文件可以在这里找到。
8.2 XML 模式
每个转储的 XML 模式在文件顶部定义,并在 MediaWiki export help page 中描述。
9 帮助解析转储以用于脚本
- Wikipedia:Computer help desk/ParseMediaWikiDump 描述了可以解析 XML 转储文件的 Perl Parse::MediaWikiDump 库。
- Wikipedia preprocessor (wikiprep.pl) 是一个 Perl 脚本,用于预处理原始 XML 转储并构建链接表、类别层次结构,并收集每篇文章的锚文本等。
- Wikipedia SQL dump parser 是一个 .NET 库,用于读取 MySQL 转储,而无需使用 MySQL 数据库
- WikiDumpParser – 一个 .NET Core 库,用于解析数据库转储。
- Dictionary Builder 是一个 Rust 程序,可以解析 XML 转储并在文件中提取条目
- Scripts for parsing Wikipedia dumps – 基于 Python 的脚本,用于解析来自 Wikipedia 转储的 sql.gz 文件。
- parse-mediawiki-sql – 一个 Rust 库,用于快速解析 SQL 转储文件,且内存分配最少
- gitlab.com/tozd/go/mediawiki – 一个 Go 包,提供用于处理 Wikipedia 和 Wikidata 转储的实用程序。