Python列表循环仅获最后一页API数据,如何收集全部分页数据?
解决API分页数据收集不全的问题
你遇到的核心问题是列表被重复初始化或错误赋值,导致之前分页请求的数据被覆盖,最终只保留最后一页的结果。而print能输出所有内容,是因为每次请求后直接打印,没有被后续操作覆盖。
常见错误原因
- 列表在分页循环内部初始化:比如每次分页请求都重新创建列表,之前的数据被清空
- 用赋值操作(
=)替代追加:比如nomes = response['nome']直接覆盖列表,而不是用append/extend添加元素
正确实现方式
把存储结果的列表定义在循环外部,并使用正确的追加方法收集每一页的数据。以下是示例代码:
def unidades(projeto_id): # 列表初始化在分页循环之前,整个函数执行期间只创建一次 nomes = [] for start in range(4): # 替换为你的真实API请求逻辑,比如: # import requests # response = requests.get(f"你的API地址?projeto_id={projeto_id}&start={start}") # page_data = response.json() # page_nomes = [item['nome'] for item in page_data['data']] # 模拟API返回的单页nome列表 page_nomes = [f"unidade_{projeto_id}_{start}_1", f"unidade_{projeto_id}_{start}_2"] # 用extend批量添加整页元素,或用append逐个添加 nomes.extend(page_nomes) # 若单个元素追加: # for nome in page_nomes: # nomes.append(nome) return nomes # 遍历项目ID并收集所有数据 projetos = [254, 255, 256] todas_unidades = [] for pid in projetos: unidades_do_projeto = unidades(pid) todas_unidades.extend(unidades_do_projeto) print(todas_unidades)
关键要点
- 列表初始化时机:确保存储结果的列表只在需要持续追加数据的循环外部初始化一次
- 追加方法区分:
extend():用于将另一个列表的所有元素添加到当前列表(适合API返回多元素列表的场景)append():用于添加单个元素(适合遍历API返回的每个元素逐个添加)
- 避免赋值覆盖:不要直接用
=给列表重新赋值,这会丢弃之前存储的所有数据
内容的提问来源于stack exchange,提问作者Henrique Ferraz
相关产品推荐
相关产品推荐

