Json 从RESTAPI获取所有数据,包括嵌套的API链接
我正在尝试从RESTAPI中检索JSON数据,该API包含有关星战宇宙中Json 从RESTAPI获取所有数据,包括嵌套的API链接,json,pandas,api,dataframe,Json,Pandas,Api,Dataframe,我正在尝试从RESTAPI中检索JSON数据,该API包含有关星战宇宙中人、电影、星际飞船和行星的信息 这是我的密码: total_结果=[] 对于范围(1,7)中的页码: #构建URL并下载结果 url=”https://swapi.dev/api/people/?page=“+str(页码) 打印(“下载”,url) response=requests.get(url) data=response.json() 总结果=总结果+数据[“结果”] 打印(“我们有”,len(总结果),“总结果”
人
、电影
、星际飞船
和行星
的信息
这是我的密码:
total_结果=[]
对于范围(1,7)中的页码:
#构建URL并下载结果
url=”https://swapi.dev/api/people/?page=“+str(页码)
打印(“下载”,url)
response=requests.get(url)
data=response.json()
总结果=总结果+数据[“结果”]
打印(“我们有”,len(总结果),“总结果”)
SW_people_df=pd.json_规范化(总结果)
SW_人员_df.负责人()
以下是dataframe的外观:
名称
高度
大量
发色
肤色
眼睛颜色
出生年份
性别
种
网址
0
卢克·天行者
172
77
金发的
公平的
蓝色
19BBY
男性的
[]
1.
C-3PO
167
75
不适用
金
黄色的
112BBY
不适用
['http://swapi.dev/api/species/2/']
2.
R2-D2
96
32
不适用
白色,蓝色
红色
33BBY
不适用
['http://swapi.dev/api/species/2/']
3.
达斯维达
202
136
没有一个
白色
黄色的
41.9BBY
男性的
[]
4.
莱娅·奥加纳
150
49
棕色的
光
棕色的
19BBY
女性的
[]
有趣的要求
- 下载所有的人(与您相同的方法只是更多的压缩代码)
- 检查每一列是否包含链接(“http”)
- 创建包含链接的所有列的字典,该链接的数据帧是该列中所有链接结果的串联
- 现在,您已经拥有了所有数据,因此您可以合并/连接并分析每个数据类别
import requests
import pandas as pd
# people - pages 1 to 7
dfp = pd.concat([pd.json_normalize(requests.get(f"https://swapi.dev/api/people/?page={p}").json()["results"]) for p in range(1,7)])
# get all the related data from urls against ppl
linkeddf = {c:pd.concat([
pd.json_normalize(requests.get(u).json()) for u in dfp[c].explode().dropna().unique()
]) for c in dfp.columns if dfp[c].explode().str.contains("http").any() and c!="url"}
# join ppl to homeworld
dfp.merge(linkeddf["homeworld"], left_on="homeworld", right_on="url", suffixes=("_person","_world"))
# what films has a skywalker been in?
(dfp.explode("films").merge(linkeddf["films"], left_on="films", right_on="url", suffixes=("_person","_film"))
.loc[:,["name","title"]]
.query("name.str.contains('Sky')")
)
name title
0 Luke Skywalker A New Hope
17 Luke Skywalker The Empire Strikes Back
33 Luke Skywalker Return of the Jedi
53 Luke Skywalker Revenge of the Sith
61 Anakin Skywalker Revenge of the Sith
79 Anakin Skywalker The Phantom Menace
94 Shmi Skywalker The Phantom Menace
115 Anakin Skywalker Attack of the Clones
123 Shmi Skywalker Attack of the Clones