使用Python的JSON数据拉取中的KeyError

时间:2014-12-29 04:17:47

标签: python json keyerror

我正在构建一个抓取工具来提取数据,但是当我得到数据时,我无法对其进行分类。我希望使用的dict键似乎不会拉动我想要的东西。我想提取“member_id”和“vote_position”。

下面的示例显示了使用“位置”键进行拉动的尝试。使用“position”,“member_id”,“vote_position”都会产生相同的KeyError。

使用print data时,向下移动可以看到输出。尽管如此,使用print data输出后显示的键仍会产生KeyError。

我感到非常难过。任何帮助将不胜感激。

import urllib2
import json
api_key = '72c9a68****************************'
url = 'http://api.time.com/svc/politics/v3/us/legislative/blue/113/
json_obj = urllib2.urlopen(url)
data = json.load(json_obj)

print data['positions']

Traceback (most recent call last):
  File "/Users/Owner/PycharmProjects/untitled2/1", line 8, in <module>
  print data [positions]
NameError: name 'positions' is not defined

JSON数据:

 "positions": [
          {
            "member_id": "A000055",
            "vote_position": "Yes",
            "dw_nominate": "0.466"
          },
                        {
            "member_id": "A000367",
            "vote_position": "Yes",
            "dw_nominate": "0.995"
          },

一个简单的print data收益率:

{u'dw_nominate': u'-0.311', u'vote_position': u'Yes', u'member_id': u'B001242'},     {u'dw_nominate': u'0.793', u'vote_position': u'Yes', u'member_id': u'B001250'}, {u'dw_nominate': u'0.728', u'vote_position': u'Yes', u'member_id': u'B001273'}

2 个答案:

答案 0 :(得分:0)

你提供的内容:

data = {u'dw_nominate': u'-0.311', u'vote_position': u'Yes', u'member_id': u'B001242'},     {u'dw_nominate': u'0.793', u'vote_position': u'Yes', u'member_id': u'B001250'}, {u'dw_nominate': u'0.728', u'vote_position': u'Yes', u'member_id': u'B001273'}

print type(data) # returns tuple

data[0]['vote_position'] # returns 'Yes'

获取所有密钥:

for i in xrange(len(data)): # python 2.x, for python 3, use range()
    print data[i].keys()

答案 1 :(得分:0)

如果这是&#34; positions&#34;的简单案例。项目不存在,或在某处拼写不正确,您会收到如下错误:

KeyError: 'positions'

相反,您看到的NameError告诉您名为positions的变量尚未定义。 Python正在尝试使用该名称引用变量,而不是使用字符串,因为该行的内容为:

print data [positions]

这个词周围缺少引号。

(至少根据你的追溯:)

Traceback (most recent call last):
  File "/Users/Owner/PycharmProjects/untitled2/1", line 8, in <module>
  print data [positions]