萌娘百科数据爬取杂谈 / 从基于 Mediawiki 的网站获取数据方法概述

近日(指一年前开始)从萌娘百科获取了大量中文 VOCALOID 相关统计数据:Project Midango / vocaloid-china-biliran-data

在此记录从萌娘百科以及类似的基于 MediaWiki 的网站获取数据(特别是模板数据等格式化的数据)的一般方法(以及一些经验总结)

本文使用 Python 进行数据处理,并且会大量使用正则表达式进行字符串匹配

MediaWiki 相关内容

MediaWiki 是一个基于 PHP 的 Wiki 引擎,可以用于多用户共同编辑内容。MediaWiki 有一种自己的标记语言用于渲染输出 HTML 内容(即网站上的 “源代码”,也称为 Wikitext)。

MediaWiki 的入口文件是一个 index.php。萌娘百科的入口文件直接位于 https://zh.moegirl.org.cn/index.php。(但其他大多数 Wiki 站点的入口文件都在 /w/index.php,萌娘百科这种直接位于根目录的反而是特例)

访问 Wiki 页面时,向该 index.php 提交一组 actiontitle 参数。其中 title 是访问页面的标题;action 决定具体操作,如

  • view 为查看页面,普通 Wiki 读者在绝大多数时间都使用该参数访问页面。本质上的作用是请求服务器将 Wikitext 渲染成 HTML 并返回。
  • edit 为编辑页面,即查看并编辑页面的 Wikitext。当权限不足时,仅提供查看功能,本质上是将编辑区设置为 readonly 且关闭了提交功能。
  • history 为查看页面编辑历史。
  • purge 为强制刷新当前页面缓存。(原生 Mediawiki 并没有为这一操作直接提供按钮,但不少插件提供该功能)
  • raw 直接返回当前页面的 Wikitext。比起从 view 爬取数据,直接使用 Wikitext 可以大大减少用于调整格式的 HTML 标签的数据量,同时能更加简单高效地对 Wiki 模板进行识别和处理。(感谢 Wikiplus,是在研究该插件的实现原理的时候发现的)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

WC Captcha + thirty three = thirty eight