需要Python帮助JSON数据抓取

时间:2017-03-01 06:07:15

标签: python json web-scraping automation

我使用以下代码从网站上抓取数据。但我面临key error: 0

请告诉我代码中的问题。

来自网页的原始JSON响应: https://www.demo.com/api/user_details/22

响应:

{"user_details":{"user_id":"22","username":"Test","user_email":"test@gmail.com"}}

我想抓住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()

3 个答案:

答案 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抓取工具。更容易。 :)