我使用以下代码从网站上抓取数据。但我面临key error: 0
请告诉我代码中的问题。
来自网页的原始JSON响应: https://www.demo.com/api/user_details/22
响应:
{"user_details":{"user_id":"22","username":"Test","user_email":"test@gmail.com"}}
我想抓住username
,user_id
和user_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()
答案 0 :(得分:1)
data["user_details"]
是一个字典,而不是列表,您收到错误是因为您尝试使用索引访问值:
data["user_details"][index] ....
您可以通过访问dict中的特定键来获取条目:
user_id = data["user_details"]['user_id']
username = data["user_details"]['username']
user_email = data["user_details"]['user_email']
答案 1 :(得分:0)
{"user_details":{"user_id":"22","username":"Test","user_email":"test@gmail.com"}}
用户详细信息是这里的字典。另一方面,index
是来自range
调用的整数。第一个值为0
。您的代码尝试加载data["user_details"][0]
。但是该字典中没有键0
。
要遍历字典,您可以调用items
方法,该方法会为您提供(key, value)
对的元组。
d = {"user_id":"22","username":"Test","user_email":"test@gmail.com"}
for k,v in d.items():
print("Key: {}, Value: {}".format(k,v))
答案 2 :(得分:0)
正是AKS所说的,但我真的建议你使用a framework called Scrapy tocreate抓取工具。更容易。 :)