未从api获取完整数据到Jupyter笔记本

2024-06-09 00:46:03 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,CS社区

r = requests.get("https://pokeapi.co/api/v2/pokemon/")
x = r.json()
df = pd.DataFrame(x['results'])

我使用这些行从这个api获取数据到我的大数据类的jupyter笔记本,但不知为什么,我只得到了19行/行。你能帮我加载全部数据吗?还是应该在19之前删除,然后再删除其他19

谢谢你们


Tags: 数据httpsapijsondataframedfgetpokeapi
2条回答

看起来api一次只加载20条记录

如果仔细看,它有一个next键。您可以这样做:

In [467]: r = requests.get("https://pokeapi.co/api/v2/pokemon/")
In [471]: x = r.json()

In [476]: data = []
In [477]: data.append(x['results'])

# Loop until `next` is `None`
In [478]: while x.get('next'):
     ...:     r = requests.get("https://pokeapi.co/api/v2/pokemon/")
     ...:     x = r.json()
     ...:     data.append(x['results'])
     ...: 

In [473]: df = pd.DataFrame(data)

这会给你所有的记录

尝试在url查询字符串limit中一次性传递所需的记录数

例如:https://pokeapi.co/api/v2/pokemon/?limit=9999

这一限制似乎默认为20

这一限制可能对以下两方面都有用:

  • 客户端(API消费者),例如,如果客户端是内存小的计算机(例如微控制器、SBC等)
  • 并且对于服务器(API服务器)非常有用,例如,可以减少内存和带宽的使用

请注意,这样的习惯(将限制更改为最大数量)可能并不总是好的。您的客户端应用可能:

  • 变慢(因为它需要一次从网络加载所有数据;并且可能需要解析json/xml)
  • 可能需要更多的记忆
  • 可能会消耗更多的计量数据连接
  • 并且可能会消耗更多电池(上述原因)

相关问题 更多 >