如何通过MediaWiki获取维基百科实体对应的其他语言版本条目
通过MediaWiki获取英文维基条目对应中文标题的Python实现方法
所有实现均基于MediaWiki原生开放的查询能力,无需爬虫抓取页面渲染内容,按依赖复杂度从低到高有三种常用方案:
方法1:直接调用原生MediaWiki API(无重型第三方依赖)
- 核心逻辑:请求英文维基的MediaWiki接口,批量查询指定条目的跨语言链接属性,过滤语言代码为
zh的结果即为对应中文标题。单次请求最多支持传入50个条目,批量处理时按需拆分列表即可。 - 依赖安装:
pip install requests - 代码示例:
import requests import time def get_zh_titles(en_title_list, batch_size=50): api_endpoint = "https://en.wikipedia.org/w/api.php" zh_title_map = {} for i in range(0, len(en_title_list), batch_size): batch = en_title_list[i:i+batch_size] params = { "action": "query", "titles": "|".join(batch), "prop": "langlinks", "lllang": "zh", # 需要简体标题加下面这行,繁体替换为zh-hant即可 # "llvariant": "zh-hans", "lllimit": "max", "format": "json", "formatversion": "2" } resp = requests.get(api_endpoint, params=params, timeout=15) resp.raise_for_status() data = resp.json() for page in data["query"]["pages"]: en_title = page["title"] if "langlinks" not in page: zh_title_map[en_title] = None continue # 个别条目存在多中文链接场景,可按需加规则筛选 zh_title_map[en_title] = page["langlinks"][0]["title"] # 控制请求频率,避免被封禁 time.sleep(1) return zh_title_map # 调用示例 if __name__ == "__main__": test_titles = ["Python (programming language)", "MediaWiki", "Wikipedia"] print(get_zh_titles(test_titles)) # 输出: {'Python (programming language)': 'Python', 'MediaWiki': 'MediaWiki', 'Wikipedia': '维基百科'}
- 优缺点:
- 优点:轻量灵活,所有请求参数、错误处理、重试逻辑可完全自定义,无多余依赖
- 缺点:批量拆分、频率控制、异常重试等基础逻辑需要自行实现
方法2:使用mwclient轻量封装库
- 核心逻辑:mwclient是专门针对MediaWiki API做的轻量Python封装,已经封装了参数拼接、分页、基础错误重试逻辑,不用手动处理底层请求细节。
- 依赖安装:
pip install mwclient - 代码示例:
import mwclient import time def get_zh_titles_mwclient(en_title_list): site = mwclient.Site("en.wikipedia.org") zh_title_map = {} for page in site.pages[en_title_list]: en_title = page.name zh_title = None for lang, title in page.langlinks(lang="zh"): zh_title = title break zh_title_map[en_title] = zh_title time.sleep(0.5) return zh_title_map
- 优缺点:
- 优点:代码简洁,不用手动拼接API参数,基础逻辑封装完善
- 缺点:需要安装第三方库,特殊参数自定义的灵活度略低于原生API调用
方法3:使用pywikibot工具框架
- 核心逻辑:pywikibot是维基媒体官方维护的站点操作工具集,内置完整的跨语言链接匹配、重定向解析、消歧页识别能力,适合长期、十万级以上大批量处理维基数据的场景。
- 依赖安装:
pip install pywikibot - 说明:首次运行会自动生成极简配置,按提示选择对应维基站点即可,无需复杂参数设置。
- 代码示例:
import pywikibot import time def get_zh_titles_pywikibot(en_title_list): en_site = pywikibot.Site("en", "wikipedia") zh_site = pywikibot.Site("zh", "wikipedia") zh_title_map = {} for en_title in en_title_list: page = pywikibot.Page(en_site, en_title) if not page.exists(): zh_title_map[en_title] = None continue zh_page = page.getLangLink("zh", zh_site) zh_title_map[en_title] = zh_page.title() if zh_page and zh_page.exists() else None time.sleep(0.5) return zh_title_map
- 优缺点:
- 优点:稳定性最高,自动处理频率限制、重定向、消歧等特殊场景,无需手动处理边缘情况
- 缺点:库体积较大,初次配置有少量成本,小批量查询场景下偏重
注意事项:
- 所有接口请求请控制频率,单线程请求加0.5-1秒间隔即可,不要高并发请求,避免被站点封禁IP
- 部分英文条目没有对应中文条目,返回值为None,需要根据业务需求自行处理
- 个别条目存在多个中文跨语言链接(多为消歧、重定向未合并导致),可根据需求加筛选规则,比如优先取非消歧页、正式条目
- 需要固定返回简体/繁体标题时,可在API参数中增加语言变体配置,直接返回对应版本的标题
内容的提问来源于stack exchange,提问作者user19508782
相关产品推荐
相关产品推荐

