Python如何从API链接列表批量加载数据并修复requests请求报错
问题解答
错误原因
requests.get() 仅支持传入单个字符串格式的URL发起请求,你直接将URL列表作为参数传入,参数类型不匹配会直接触发报错。另外你写的[(x) for x in api_links]是无意义的列表推导,运行结果和原api_links列表完全一致,没有做任何单URL的拆分处理。
后续的解析逻辑也建立在「单次请求对应单接口响应」的前提下,传入列表得到的不是合法的响应对象,自然无法调用.text属性、加载JSON数据。
正确实现代码
你需要遍历所有API链接,逐个发起请求后解析返回结果,汇总成目标数据列表。建议加上基础异常处理,避免单个接口请求失败导致整个程序崩溃:
import requests import json api_links = ['https://api.blahblah.com/john', 'https://api.blahblah.com/sarah', 'https://api.blahblah.com/jane'] data_lst = [] for api_url in api_links: try: # 发起单个请求,可根据接口实际情况调整超时时间 resp = requests.get(api_url, timeout=10) # 校验HTTP状态码,4xx、5xx类错误会主动抛出异常 resp.raise_for_status() # 解析JSON数据,resp.json()是requests内置的JSON解析方法,等价于json.loads(resp.text) parsed_data = resp.json() data_lst.append(parsed_data) except Exception as e: print(f"请求{api_url}失败:{str(e)}") # 失败场景可根据业务需求选择重试、跳过或者追加占位值 data_lst.append(None) # 最终得到的data_lst就是和链接顺序一一对应的接口返回数据列表
如果需要请求的接口数量较多、对速度有要求,可以替换为aiohttp做异步并发请求,上述同步遍历的写法逻辑最简单,适合绝大多数常规场景。
内容的提问来源于stack exchange,提问作者ducttape101
相关产品推荐
相关产品推荐

