Python解析API嵌套JSON:分页提取指定字段报错解决
问题解决:NFZ API数据提取报错修正
错误原因
你代码第18行的报错源于索引逻辑错误:all_data已经是response['data']['agreements']返回的列表对象,你却试图用字符串索引['data']['agreements']访问它——列表仅支持整数/切片索引,因此触发"list indices must be integers or slices, not str"错误。同时原代码中providerlist.append(providers)放在循环外,只会收集最后一条数据,无法实现批量提取。
修正后的代码
import requests import math import pandas as pd # 移除baseurl中多余的page参数,避免动态拼接时重复 baseurl = 'https://api.nfz.gov.pl/app-umw-api/agreements?year=2022&branch=01&productCode=01.0010.094.01&limit=10&format=json&api-version=1.2' def main_request(baseurl, x): r = requests.get(baseurl + f'&page={x}') return r.json() def get_pages(response): return math.ceil(response['meta']['count'] / 10) def get_names(response): providerlist = [] # all_data已经是agreements列表,直接遍历每个条目 all_data = response['data']['agreements'] for agreement in all_data: # 提取目标字段 provider_name = agreement['attributes']['provider-name'] # 将每个字段存入字典并添加到列表 providerlist.append({'provider-name': provider_name}) return providerlist mainlist = [] data = main_request(baseurl, 1) total_pages = get_pages(data) # 遍历所有分页 for x in range(1, total_pages + 1): mainlist.extend(get_names(main_request(baseurl, x))) # 生成DataFrame mydataframe = pd.DataFrame(mainlist) print(mydataframe)
关键修改说明
- 修正索引逻辑:直接遍历
all_data列表(已对应response['data']['agreements']),无需重复索引 - 调整收集位置:将
providerlist.append()移入循环内,确保每个provider-name都被收集 - 优化参数结构:移除baseurl中固定的
page=1,避免动态拼接时参数冲突 - 符合需求要求:使用
requests内置的r.json()解析数据,无需额外导入json包,也未生成JSON文件
内容的提问来源于stack exchange,提问作者Michael Wiz
相关产品推荐
相关产品推荐

