You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:45:44