使用Wikipedia API批量查询分类翻译结果缺失问题解决
解决维基API批量查询langlinks丢失的问题
问题根源
批量请求时部分早期分类的langlinks丢失,核心原因通常是未解析重定向条目或langlinks参数限制:
- 很多早期分类条目是重定向状态,默认情况下API不会自动跟进重定向获取目标条目的langlinks,导致返回的重定向条目本身无langlinks数据。
- 默认
lllimit值较小(通常为10),若分类的langlinks数量超过限制,会被截断,但单请求时可能因参数默认值不同或隐式处理导致完整返回。
修正后的批量请求参数
要让批量请求和单请求行为一致,必须在请求中添加以下关键参数:
redirects=1:自动解析重定向,返回目标条目的数据而非重定向条目本身。lllimit=max:设置langlinks返回的最大数量,确保所有关联语言链接都被获取。lllang=目标语言代码(可选):如果只需要特定语言的翻译,比如lllang=zh,避免返回无关语言链接,同时优先返回目标语言结果。
示例批量请求URL:
https://en.wikipedia.org/w/api.php?action=query&titles=Category:19th_century_books|Category:Old_computers&prop=langlinks&redirects=1&lllimit=max&lllang=zh&format=json
代码实现与补全方案
如果调整参数后仍有个别条目丢失langlinks,可以在代码中对缺失条目单独请求补全:
批量请求+缺失补全示例(Python)
import requests def get_langlinks(titles, target_lang="zh"): # 批量请求 batch_url = ( f"https://en.wikipedia.org/w/api.php?action=query&titles={titles}" f"&prop=langlinks&redirects=1&lllimit=max&lllang={target_lang}&format=json" ) response = requests.get(batch_url) data = response.json() pages = data["query"]["pages"] # 检查并补全缺失的langlinks for page_id, page in pages.items(): if "langlinks" not in page and "missing" not in page: # 对缺失条目单独请求 single_url = ( f"https://en.wikipedia.org/w/api.php?action=query&titles={page['title']}" f"&prop=langlinks&redirects=1&lllimit=max&lllang={target_lang}&format=json" ) single_resp = requests.get(single_url) single_page = next(iter(single_resp.json()["query"]["pages"].values())) if "langlinks" in single_page: page["langlinks"] = single_page["langlinks"] return pages # 使用示例(最多50个分类用|分隔) batch_titles = "Category:19th_century_books|Category:Old_computers" result = get_langlinks(batch_titles) for page in result.values(): print(f"{page['title']}: {page.get('langlinks', 'No translations')}")
验证要点
- 先通过单请求确认某分类是否真的存在langlinks,排除本身无翻译的情况。
- 检查批量请求返回的条目是否带有
missing标记,这类是不存在的分类,无需处理。
内容的提问来源于stack exchange,提问作者Bram Vanroy
相关产品推荐
相关产品推荐

