Python调用Star Wars API分页拉取全量角色(people)数据问询
原有代码的问题
- 循环范围仅设置了
range(1,3),只会执行2次请求,远不够覆盖9页数据 - 请求地址参数错误,
https://swapi.dev/api/people?page没有拼接页码值,每次请求实际返回的都是第一页数据 - 循环中每次都直接给
results赋值,会覆盖上一页的结果,最终只能拿到最后一次请求的数据
最优解决方案(无需提前知晓总页数)
SWAPI的返回结果中自带next字段,存储下一页的请求地址,当没有下一页时next值为null,直接用该字段做循环终止条件即可,就算后续接口总角色数变动也无需调整代码。
import requests import json # 初始化存储所有角色的总列表 all_people = [] # 第一页的请求地址 current_url = "https://swapi.dev/api/people" while current_url: resp = requests.get(current_url) # 解析返回内容,也可以直接用resp.json()替代json.loads(resp.content),效果一致 page_data = json.loads(resp.content) # 把当前页的角色数据追加到总列表中 all_people.extend(page_data['results']) # 更新为下一页地址,没有下一页时current_url为None,自动终止循环 current_url = page_data['next'] # 输出结果验证 print(f"总共有{len(all_people)}个角色数据") # 所有角色数据存储在all_people变量中可直接使用 print(all_people)
内容的提问来源于stack exchange,提问作者Jose Antonio Piedehierro Arias
相关产品推荐
相关产品推荐

