我看过 Raymond Hettinger 的 Idiomatic Python交谈,了解了sentinel argument到 iter()
。
我想尝试将它应用到我正在迭代使用分页的 API 的一段代码中(它是 Twilio,但与我的问题无关)。
我有一个返回数据列表和下一页 URL 的 API。当分页用完时,下一页 URL 将作为空字符串返回。我将抓取函数写成生成器,大致如下所示:
def fetch(url):
while url:
data = requests.get(url).json()
url = data['next_page_uri']
for row in data[resource]:
yield row
此代码工作正常,但我想尝试删除 while
循环并使用 next_page_uri 调用
值作为哨兵参数。
或者,这可以用 iter()
来替换它yield from
编写吗?
最佳答案
我认为这可能就是您的意思……但正如评论中所述,它并没有多大帮助:
def fetch_paged(url):
while url:
res = requests.get(url)
res.raise_for_status()
data = res.json()
yield data
url = data['next_page_uri']
def fetch(url):
for data in fetch_paged(url):
yield from data[resource]
(我借此机会调用了 raise_for_status()
,这将是 raise
表示不成功,即 res.status_code < 400
响应)
不确定它是否“更好”,但如果您要重复使用 fetch_paged
可能功能很多
注意:许多其他 API 将此 next_page_uri
进入 standard ways 中的响应头哪个requests
库知道如何通过 res.links
处理和公开属性
关于python - 如何将 iter() 应用于分页 api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53905012/