Python 3.6 API while while循环到json脚本没有结束
问题描述:
我试图创建一个循环通过API调用一个json字符串,因为每个调用被限制为200行。当我尝试下面的代码时,即使我让代码运行一个小时左右,循环似乎也不会结束。我希望提取的最大行大约是来自API的约200k行。Python 3.6 API while while循环到json脚本没有结束
bookmark=''
urlbase = 'https://..../?'
alldata = []
while True:
if len(bookmark)>0:
url = urlbase + 'bookmark=' + bookmark
requests.get(url, auth=('username', 'password'))
data = response.json()
alldata.extend(data['rows'])
bookmark = data['bookmark']
if len(data['rows'])<200:
break
而且,我期待的循环过滤,仅输出,如果JSON值“pet.type”是“小狗”还是“小猫”。一直无法弄清楚语法。
任何想法?
谢谢
答
您的循环的休息条件不正确。请注意,它正在检查len(data["rows"])
,其中data
只包含来自最近请求的行。
取而代之,您应该查看总计到目前为止收集的行数:len(alldata)
。
bookmark=''
urlbase = 'https://..../?'
alldata = []
while True:
if len(bookmark)>0:
url = urlbase + 'bookmark=' + bookmark
requests.get(url, auth=('username', 'password'))
data = response.json()
alldata.extend(data['rows'])
bookmark = data['bookmark']
# Check `alldata` instead of `data["rows"]`,
# and set the limit to 200k instead of 200.
if len(alldata) >= 200000:
break
尝试在循环的每一轮中输出'url'和'len(data ['rows'])''的值。 –
我不知道我明白你在做什么。当你的行数少于200行时,你是否突破了,因为这表明没有更多数据需要消耗? – jsfan
@jsfan基本上每个API调用循环200行后,我希望循环打破一旦有少于200行留在“alldata”收集 – n4zy