2016-03-19 30 views
-1

我正在嘗試編寫一個腳本(Python 2.7.11,Windows 10)來從API收集數據並將其附加到csv文件中。從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的部分顯然有問題。或者全部。

我嘗試過使用其他資源和教程,但在某些時候,我卡住了,我將不勝感激您的協助。

+2

你在調用這個'api_iterate'函數嗎? – alecxe

+0

什麼是實際的網址?你所擁有的腳本有許多問題會阻止它工作。 –

+0

感謝您的幫助@alecxe - 不,我在寫這篇文章的時候沒有打電話給我,但後來我意識到我應該這樣做。對不起,我剛剛開始玩它。但它沒有改變任何東西。 – Jan

回答

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  
+0

非常感謝你@Martin Evans,這非常棒。我完全理解你的解決方案背後的邏輯。話雖如此,我仍然不確定我的錯在哪裏,除了它沒有工作:)我很尷尬,我必須自己弄清楚。無論如何,再次感謝。 – Jan

+0

em ..我試圖用你的代碼來訪問另一個api(ofc與適當的變化),似乎我仍然沒有得到它,因爲代碼不起作用。我是否應該將它作爲另一個問題發佈,還是可以在此線程中打擾您? – Jan

+0

這可能是一個單獨的問題。 json佈局的機會是不同的,或者可能不會給你一個「下一個」元素,所以需要不同的解決方案。隨意鏈接回到這個。 –