从api读取数据并填充.csv错误

时间:2016-03-19 13:40:50

标签: python

我正在尝试编写一个脚本(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的部分,显然存在问题。或者全部。

我尝试过使用其他资源和教程,但在某些时候我遇到了困难,感谢您的帮助。

1 个答案:

答案 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    
相关问题