维基百科API获取主图异常:如何获取英国现任首相肖像?
我尝试通过维基百科API获取英国首相页面的主图,但调用时返回的是页面右侧的皇家徽章;而用相同方法获取内政大臣页面时,能正确返回现任内政大臣Suella Braverman的肖像。相关代码如下:
import requests from flask import Flask from flask_cors import CORS, cross_origin from flask import jsonify app = Flask(__name__) cors = CORS(app) def getQuery(search): response = requests.get(search) results = response.json() return jsonify(results) pmPageID = 24150 HomeSecPageID = 149104 query = 'https://en.wikipedia.org/w/api.php?action=query&prop=pageimages&format=json&piprop=original&pageids={}' @app.route('/') @cross_origin() def index(): result = getQuery(query.format(pmPageID)) return result
以下是几种获取现任首相肖像的可行方法:
直接使用现任首相的个人维基页面ID
英国首相的职位页面(ID:24150)主图默认是皇家徽章,而现任首相的个人维基页面会包含专属肖像。找到当前首相的个人页面ID(比如里希·苏纳克的页面ID为10998185),替换代码中的pmPageID即可:pmPageID = 10998185 # 替换为现任首相个人维基页面ID从职位页面的信息框(Infobox)提取肖像链接
通过维基百科API获取职位页面的信息框内容,从中提取肖像字段的图片名称,再构造完整的图片URL。示例代码如下:
import requests
from flask import Flask, jsonify
from flask_cors import CORS, cross_origin
import re
app = Flask(name)
cors = CORS(app)
def get_pm_portrait():
page_id = 24150 # 英国首相职位页面ID
api_url = f"https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&pageids={page_id}&rvsection=0"
response = requests.get(api_url)
data = response.json()
# 提取页面内容中的信息框部分 content = data['query']['pages'][str(page_id)]['revisions'][0]['*'] # 匹配信息框中的image字段 image_match = re.search(r'\| *image *= *([^\|\n]+)', content) if image_match: image_filename = image_match.group(1).strip() # 构造维基媒体 Commons 的原始图片URL portrait_url = f"https://upload.wikimedia.org/wikipedia/commons/thumb/{image_filename[0]}/{image_filename[:2]}/{image_filename}/original/{image_filename}" return jsonify({"portrait_url": portrait_url}) return jsonify({"error": "无法找到肖像链接"})
@app.route('/')
@cross_origin()
def index():
return get_pm_portrait()
- **通过Wikidata关联查询现任首相信息** 利用Wikidata API,先通过英国首相职位的条目(Q7275)找到现任任职者,再获取其对应的维基百科页面ID,最后用原API方法获取肖像。这种方法能自动适配首相更迭,无需手动更新页面ID。 内容的提问来源于stack exchange,提问作者user12609637

