1. MediaWiki API 基础:列表请求的核心参数与用途
1.1 为什么使用 MediaWiki API 获取“列表”数据
MediaWiki API 提供了统一的入口来获取站内的结构化数据,其中“列表请求”是最常用的场景之一。通过 list 参数可以指定要查询的列表类型,如 categorymembers、search、allpages 等,从而高效地获取分类成员、搜索结果或页面清单等信息。
在进行列表请求时,通常还需要指定 prop、cmtitle、cmlimit 等参数,以控制返回数据的字段、所属分类和单次返回条数,从而实现精准的数据抓取与分页控制。
要点回顾:使用 MediaWiki API 获取列表时,务必关注 action、format、list、以及分页相关参数的组合,以确保返回结构清晰、易于后续处理。
1.2 常见的列表类型与用途概览
常用的 列表类型包括 categorymembers(分类成员)、search(站内搜索结果)、以及 allpages(站内所有页面的列表)。这些类型覆盖了从导航结构到搜索结果再到页面清单的典型场景。
通过组合 action=query 与 list=categorymembers 等参数,可以快速获取某个分类下的所有条目的名称、页面 ID 等元信息,便于后续的批量处理与数据分析。
{"batchcomplete": "","continue": { "cmcontinue": "abcdefg", "continue": "-||" },"query": {"categorymembers": [{ "pageid": 123, "ns": 0, "title": "Algorithm" },{ "pageid": 124, "ns": 0, "title": "Data structure" }]}
}2. 列表获取与分页处理:continue 与分页机制
2.1 使用 continue 参数实现分页获取
MediaWiki API 的返回通常会包含一个 continue 字段,指示下一次请求应使用的 cmcontinue(或其他命名)值,从而实现跨页获取。正确处理分页能够避免单次请求返回数量过少的问题,并且可以构建可控的数据抓取流程。
在实现时,最好将 cmcontinue 与后续请求的 URL 参数动态拼接,循环直至返回结果中不再包含 continue 字段。
curl "https://zh.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Algorithms&cmlimit=50&format=json"
curl "https://zh.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Algorithms&cmlimit=50&continue=&cmcontinue=abcdefg&format=json"2.2 精简分页输出:formatversion=2 的可读性优化
为提升分页结果的可解析性,formatversion=2 可以将返回结构改为更平扁平的数组形式,减少对象包裹层级,便于直接映射到语言原生数据结构。
结合 format=json 使用时,开发者能够更快速地用脚本语言遍历结果,减少解析开销。
curl "https://zh.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Algorithms&cmlimit=50&format=json&formatversion=2"3. 换行符与文本处理:从 API 数据到可阅读输出
3.1 获取条目修订内容时的换行处理与换行符表示
当你需要查看某个条目的原始修订内容时,通常会用 prop=revisions 搭配 rvprop=content,此时返回的内容保留了原始 wikitext 的换行符,适合做进一步的文本处理或离线分析。
如果目标是直接展示为可读文本,可以使用 explaintext 选项将修订内容转为纯文本,自动处理标题、列表、换行等排版问题,以获得更友好的显示效果。
curl "https://zh.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles=Algorithm&format=json"3.2 将原始换行转换为网页友好的换行显示
在前端渲染时,将换行符(如 “\n”)转换为 HTML 换行标记 <br/>,或在模板中以段落标签拆分文本,是常见的处理方式。若直接显示 wikitext 的换行,读者体验会大打折扣。
实践中常见的做法是:先将 API 返回的文本提取为字符串,然后在渲染阶段执行换行替换,确保列表项与段落都能正确呈现。
def render_with_br(text):return text.replace('\\n', '
')4. 实战技巧:组合查询实现列表提取与换行处理的落地方案
4.1 组合查询:获取分类成员并输出带换行的简版摘要
在实际应用中,往往需要先获取分类成员的名称(列表数据),再获取每个条目的修订摘要进行展示。通过 list=categorymembers 与 prop=extracts/explaintext 的组合,可以实现“分类 -> 摘要”的一键流转。
要点是将两次请求的结果合并到一个结构中,并在前端对摘要文本进行换行处理以实现友好展示。
curl "https://zh.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Algorithms&cmlimit=10&prop=extracts&explaintext&format=json"4.2 实时应用场景:把 API 输出转为 CSV/表格进行分析
将 API 返回的 JSON 结构转换为 CSV 或二维表格,是数据分析与可视化的常用路径之一。此时需要关注字段统一、编码、以及换行符的处理,以确保每条记录在表格中占据稳定的列。
常见做法是:将 pageid、title、summary 等字段映射为列,并对摘要中的换行进行统一替换或分割成多列。

import json, csv
data = json.loads(api_response)
with open('categories.csv', 'w', newline='', encoding='utf-8') as f:writer = csv.writer(f)writer.writerow(['pageid','title','summary'])for item in data['query']['categorymembers']:writer.writerow([item.get('pageid'), item.get('title'), item.get('extract','')])
4.3 常见坑点与解决策略
在处理 MediaWiki API 的列表与换行数据时,常见的坑点包括:分页未处理完、编码问题、跨语言的标题命名差异、以及换行符在不同客户端的渲染差异。解决策略包括:逐页请求并合并结果、统一使用 UTF-8 编码、保持标题的原始命名以避免重名冲突,以及在前端统一执行换行处理与 HTML 转义。
另外,使用 formatversion=2 可以让 JSON 结构更易于直接解析,减少嵌套深度,从而提升开发效率与代码稳定性。
{"title": "Category:Algorithms","members": [{ "pageid": 123, "title": "Algorithm" },{ "pageid": 124, "title": "Data structure" }],"continuation": null
} 

