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

调用Wikipedia API时action参数被忽略?不同URL返回相同结果

问题根因

不是MediaWiki API忽略URL里的action参数,问题出在requests库的参数拼接逻辑上。
当你调用S.get(url=URL, params=PARAMS)时,requests会自动把PARAMS字典里的所有键值对追加/拼接到请求URL的查询字符串部分,如果原URL里已经存在同名参数,会直接被PARAMS里同key的值覆盖。
你取消注释的URL里自带的action=feedcontributions、user=Urmi27两个参数,会被PARAMS里写死的action: "query"以及其他最近更改相关的参数覆盖,最终实际发出的请求和使用第一个无参数URL的请求完全相同,自然返回结果没有区别。

修正方法

两种改法都能实现查询指定用户贡献的需求:

  • 方法一:统一在PARAMS字典里维护所有请求参数,不要把参数硬拼接在URL中(推荐,可读性和可维护性更好)
import requests

S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"

# 查询用户贡献的参数,注意如果要返回JSON格式,不建议用feedcontributions(默认返回RSS/XML),用query接口下的usercontribs模块更合适
PARAMS = {
    "format": "json",
    "action": "query",
    "list": "usercontribs",
    "ucuser": "Urmi27",
    "uclimit": "3",
    "ucprop": "comment|title|ids|size"
}

R = S.get(url=URL, params=PARAMS)
DATA = R.json()

contributions = DATA['query']['usercontribs']
for contrib in contributions:
    print(contrib['title'])
  • 方法二:如果要使用提前拼接好参数的完整URL,调用get方法时不要传入params参数
import requests

S = requests.Session()
# 直接使用拼好所有参数的完整URL,不再额外传PARAMS
URL = "https://en.wikipedia.org/w/api.php?action=query&list=usercontribs&ucuser=Urmi27&uclimit=3&format=json&ucprop=comment|title|ids|size"

R = S.get(url=URL)
DATA = R.json()

contributions = DATA['query']['usercontribs']
for contrib in contributions:
    print(contrib['title'])

注意:action=feedcontributions是用于生成RSS订阅源的接口,默认返回XML格式内容,不支持直接返回JSON结构,如果需要程序化解析贡献数据,优先选择action=query+list=usercontribs的参数组合。

内容的提问来源于stack exchange,提问作者shantanuo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:42:27