2017-03-01 30 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'变量中显示数据。 –