我正在尝试编写一个脚本(Python 2.7.11,Windows 10)来从API收集数据并将其附加到csv文件。
我想要使用的API在json中返回数据。 它会限制显示的记录数,并对其进行分页。 因此,单个查询可以获得最大数量的记录,然后您必须运行另一个查询,更改页码。
API会通知您数据集所分割的页面数。 假设每页的最大记录数为100,页面的nr为2。
我的剧本:
import json
import urllib2
import csv
url = "https://some_api_address?page="
limit = "&limit=100"
myfile = open('C:\Python27\myscripts\somefile.csv', 'ab')
def api_iterate():
for i in xrange(1, 2, 1):
parse_url = url,(i),limit
json_page = urllib2.urlopen(parse_url)
data = json.load(json_page)
for item in data['someobject']:
print item ['some_item1'], ['some_item2'], ['some_item3']
f = csv.writer(myfile)
for row in data:
f.writerow([str(row)])
这似乎不起作用,即它创建了一个csv文件,但是没有填充该文件。对于构建查询地址的脚本部分或者处理读取json的部分或者处理将查询写入csv的部分,显然存在问题。或者全部。
我尝试过使用其他资源和教程,但在某些时候我遇到了困难,感谢您的帮助。
答案 0 :(得分:0)
您提供的网址提供了指向下一页的链接作为其中一个对象。您可以使用它在所有页面上自动迭代。
下面的脚本获取每个页面,从Dataobject
数组中提取两个条目并将它们写入output.csv
文件:
import json
import urllib2
import csv
def api_iterate(myfile):
url = "https://api-v3.mojepanstwo.pl/dane/krs_osoby"
csv_myfile = csv.writer(myfile)
cols = ['id', 'url']
csv_myfile.writerow(cols) # Write a header
while True:
print url
json_page = urllib2.urlopen(url)
data = json.load(json_page)
json_page.close()
for data_object in data['Dataobject']:
csv_myfile.writerow([data_object[col] for col in cols])
try:
url = data['Links']['next'] # Get the next url
except KeyError as e:
break
with open(r'e:\python temp\output.csv', 'wb') as myfile:
api_iterate(myfile)
这将为您提供一个类似于:
的输出文件id,url
1347854,https://api-v3.mojepanstwo.pl/dane/krs_osoby/1347854
1296239,https://api-v3.mojepanstwo.pl/dane/krs_osoby/1296239
705217,https://api-v3.mojepanstwo.pl/dane/krs_osoby/705217
802970,https://api-v3.mojepanstwo.pl/dane/krs_osoby/802970