2017-09-05 43 views
1

我想擊中星球大戰API並將字符名稱的值存儲在列表中。我正在使用.append,但它只存儲最後一頁的名稱。我已經嘗試了列表和字典來存儲名稱。該API分頁。試圖通過多個頁面迭代星球大戰JSON的飼料和存儲在列表中的值

我想成爲一個非常基本的字符搜索工具,返回字符信息,如果字符存在。我在Mac上通過Anaconda在Spyder中使用Python 3.6。欣賞任何指導。

謝謝。

import requests 
import urllib.parse 

#number of pages in JSON feed 
page_list = [1,2,3,4,5,6,7,8,9] 

for i in range(len(page_list)): 
    try: 
     pages = page_list[i] 

     endpoint = "https://swapi.co/api/people/?" 

     type = 'json' 

     #specifies api parameters 
     url = endpoint + urllib.parse.urlencode({"format": type, "page": pages}) 
     #print(url_2) 

     #gets info 
     json_data = requests.get(url).json() 
     number_of_char = json_data['count'] 

     #list to store names 
     st_names = [] 

     count = 0 
     while count <= number_of_char: 
      print(json_data['results'][count]['name']) 
      st_names.append([json_data['results'][count]['name']]) 
      count = count + 1 

#error handling 
    except KeyError: 
     print('Key error \n') 
     pass 
    except IndexError: 
     print('Index error \n') 
     pass 

回答

2

你已經在循環中聲明瞭列表,所以它在每次迭代中被覆蓋。所以在for循環之外聲明你的列表。

+0

哇,沒注意到。謝謝!當然,它現在起作用。 – Eric

+0

請添加解釋,現在它更多的是評論而不是答案。 [回答] – izlin

+0

我已經添加了解釋。感謝您指向@izlin –

0

因爲我在循環中聲明瞭列表,所以它重寫了自身並覆蓋了第一次迭代。

將聲明拉到循環之外解決了這個問題。