如何将Python的requests GET请求转为带参数的asyncio异步请求?
异步调用Wikidata API:传递参数的正确方式
不需要手动拼接URL,aiohttp的get方法和requests完全一样支持params参数来传递查询参数,直接复用你现有的payload即可。
完整实现代码
import asyncio from aiohttp import ClientSession async def fetch_wikidata(search_term): base_url = "https://www.wikidata.org/w/api.php" payload = { "action": "query", "list": "search", "srsearch": search_term, "language": "en", "format": "json", "origin": "*", } async with ClientSession() as session: async with session.get(base_url, params=payload) as resp: return await resp.json() # 并行执行多个请求 async def main(): terms = ["Python", "asyncio", "Wikidata"] tasks = [fetch_wikidata(term) for term in terms] results = await asyncio.gather(*tasks) for term, res in zip(terms, results): print(f"{term}的搜索结果:", res.get('query', {}).get('search', [])) if __name__ == "__main__": asyncio.run(main())
核心要点
session.get的params参数会自动将payload中的键值对编码为URL查询字符串,和requests的逻辑完全一致,无需手动拼接。- 使用
await resp.json()直接获取解析后的JSON对象,比read()返回字节流更高效便捷。 - 通过
asyncio.gather可以批量创建异步任务,实现真正的并行请求,大幅提升多请求场景下的效率。
内容的提问来源于stack exchange,提问作者Tiago Lubiana
相关产品推荐
相关产品推荐

