本文详解因请求参数误用导致循环中所有 api 响应都返回最后一个查询结果的常见错误,并提供修复方案、代码优化建议及最佳实践。
在使用 Wikimedia API 批量搜索词条时,一个典型陷阱是:循环中未将当前迭代变量传入请求参数,却错误地复用了整个列表(如 search_query)作为查询关键词。这会导致每次请求实际发送的都是相同的完整列表(例如 ['Esteghlal FC','Liverpool FC']),而 API 通常会以该字符串整体作为搜索词进行匹配——最终因语义模糊或默认行为,所有请求意外命中同一个高相关度条目(如 “Liverpool FC”),造成“所有结果都相同”的假象。
根本问题出现在这行代码中:
parameters = {'q': search_query, 'limit': number_of_results} # ❌ 错误:传入了整个列表应改为动态使用当前迭代项:
parameters = {'q': team, 'limit': number_of_results} # ✅ 正确:每次传入当前 team 字符串此外,还有两项关键优化可提升代码健壮性与可读性:
✅ 优化后的完整示例:
import requests
# ✅ 提前构建固定 URL(仅含语言和端点)
base_url = "https://api.wikimedia.org/core/v1/wikipedia/"
language_code = "es"
endpoint = "/search/page"
url = f"{base_url}{language_code}{endpoint}" # 如:https://api.wikimedia.org/core/v1/wikipedia/es/search/page
# 请求配置
headers = {"User-Agent": "MyWikiApp (contact@example.com)"}
number_of_results = 1
# 查询列表与结果容器
teams = ["Esteghlal FC", "Liverpool FC"]
articles = []
# ✅ 循环中正确使用当前 team
for 
team in teams:
params = {"q": team, "limit": number_of_results}
response = requests.get(url, headers=headers, params=params)
# ⚠️ 生产环境务必添加基础错误处理
response.raise_for_status() # 抛出 HTTPError(如 404/500)
articles.append(response.json())
# 验证结果多样性
print(f"共获取 {len(articles)} 条响应")
for i, article in enumerate(articles):
page = article.get("pages", [{}])[0]
title = page.get("title", "N/A")
key = page.get("key", "N/A")
print(f"[{i+1}] 标题: '{title}' | Key: {key}")? 注意事项总结:
通过修正参数绑定逻辑并采纳上述工程实践,即可稳定获取每个查询词对应的独立搜索结果,彻底解决“Iterable 返回最后值”的问题。