2017-03-01 31 views
0

我正在使用下面的代碼從網站上抓取數據。但我面臨着key error: 0在Python中需要幫助來處理JSON數據

請告訴我在我的代碼中的問題。從網頁

原始JSON響應: https://www.demo.com/api/user_details/22

響應:

{"user_details":{"user_id":"22","username":"Test","user_email":"[email protected]"}} 

我想刮usernameuser_iduser_email

我曾嘗試:

import json 
import requests 
import datetime 

#data outputs to a CSV file in the current directory 
csv_output = open("test.csv", "w") 

end_page = 5; 

#scan through pages 1 to end_page for data, 20 results per page 
for page in range(1,end_page+1): 
    r = requests.get('https://www.demo.com/api/user_details/' + str(page)) 
    data = r.json() 
    for index in range(len(data["user_details"])): 

     csv_output.write("\"%s\",%s\n" % (data["user_details"][index]["user_id"].encode('ascii', 'ignore'))), 

     data["user_details"][index]["user_id"] 

csv_output.close() 

回答

1

data["user_details"]是一個字典,而不是一個清單,你正在因爲你試圖使用索引來訪問值誤差:

data["user_details"][index] .... 

你可以通過訪問字典中的特定鍵獲得條目:

user_id = data["user_details"]['user_id'] 
username = data["user_details"]['username'] 
user_email = data["user_details"]['user_email'] 
+0

如果我刪除索引,它會工作嗎? –

0
{"user_details":{"user_id":"22","username":"Test","user_email":"[email protected]"}} 

用戶的詳細信息,這裏的一個詞典。另一方面,index是來自range呼叫的整數。第一個值將是0。您的代碼嘗試加載data["user_details"][0]。但該字典中沒有關鍵0

要遍歷字典,你可以調用items方法,它會給你一個包含(key, value)對的元組。

d = {"user_id":"22","username":"Test","user_email":"[email protected]"} 
for k,v in d.items(): 
    print("Key: {}, Value: {}".format(k,v)) 
+0

我的代碼沒有循環請求。它只是在'd'變量中顯示數據。 –