为何调用Wikipedia随机API时部分页面无内容返回?
问题原因及解决方案
这种无revisions字段的情况,主要源于以下两种情况:
- 重定向页面:比如你提到的
Alope (Thessaly),这类页面本身没有实际正文,只是指向其他维基页面的跳转链接。维基API默认不会返回重定向页面的内容,仅返回基础页面信息。 - 空页面或特殊状态页面:极少数主命名空间(ns=0)的页面可能刚创建未添加内容,或被标记删除但页面记录仍存在,这类页面自然没有正文数据。
验证与解决办法
1. 识别重定向页面
可以在API请求中添加参数,让API返回重定向的目标信息:
import json import requests # 添加处理重定向的参数 r = requests.get('https://en.wikipedia.org/w/api.php?format=json&action=query&generator=random&grnnamespace=0&prop=revisions|info&rvprop=content&grnlimit=75&rdredirect=1&rdprop=title') j = json.loads(r.text) for page_id, page_data in j['query']['pages'].items(): if 'redirect' in page_data: print(f"重定向页面: {page_data['title']} -> {page_data['redirect']['to']}") continue content_status = "has content" if 'revisions' in page_data else "no content" print(f"{content_status}\t{page_data['title']}\thttp://en.wikipedia.org/?curid={page_id}") if 'revisions' not in page_data: print(page_data) print()
2. 自动获取重定向目标内容
如果想直接拿到重定向指向页面的正文,可以在API请求中加入redirects参数,让API自动跟进重定向并返回目标页面的内容:
# 自动处理重定向,返回目标页面内容 r = requests.get('https://en.wikipedia.org/w/api.php?format=json&action=query&generator=random&grnnamespace=0&prop=revisions&rvprop=content&grnlimit=75&redirects')
添加该参数后,API会自动将重定向页面替换为目标页面,返回的pages字段中就能获取到正文内容。
内容的提问来源于stack exchange,提问作者Alex Berliner
相关产品推荐
相关产品推荐

