为什么在读取带有get请求的数据时出现KeyError?

时间:2019-06-17 13:28:22

标签: python json web-scraping httprequest get-request

我正在尝试使用此简单的代码从网站读取数据,但是它给了我KeyError['p']

for i in range(25200):

    time.sleep(1)
    with requests.Session() as s:
               data = {'current' : 'afghan_usd' }
               r = s.get('http://call5.tgju.org/ajax.json?2019061716-20190617171520-I4OJ3OcWf4gtpzr3JNC5', json = data ).json()
               #print(r)
    for key, value in r["current"].items():
        last_prices = (r[key]['p'])
        z.append(last_prices)
        mid.append(mean(z)) 

给定的r如下:

{'current': {'afghan_usd': {'p': '154530', 'h': '157260', 'l':
 '154530', 'd': '3640', 'dp': 2.36, 'dt': 'low', 't': '۱۷:۲۷:۰۳',
 't_en': '17:27:03', 't-g': '۱۷:۲۷:۰۳', 'ts': '2019-06-17 17:27:03'}}

您可以在此处查看响应(r)的全部内容:https://github.com/rezaee/coursera-test/issues/1

编辑:

我这样编辑代码:

for i in range(25200):

    time.sleep(1)
    with requests.Session() as s:
               data = {'current' : 'afghan_usd' }#code}
               r = s.get('http://call5.tgju.org/ajax.json?2019061716-20190617171520-I4OJ3OcWf4gtpzr3JNC5', json = data ).json()
               #print(r)

    for key, value in r["current"]["afghan_usd"].items():
        last_prices = float(value.replace("," , ""))
        z.append(last_prices)
        mid.append(mean(z)) 

但是我收到了这个新错误:

  

AttributeError:“浮动”对象没有属性“替换”

3 个答案:

答案 0 :(得分:2)

我认为您正在尝试遍历r["current"]

for key, value in r["current"].items():
    # for first iteration:
    # key is afghan_usd
    # value is {'p': ....}
    try:
        price = value["p"]
    except TypeError:  # value is a string
        price = value
    last_prices = float(price.replace(',', ''))
    z.append(last_prices)
    mid.append(mean(z))

答案 1 :(得分:1)

一些建议:

在循环之前将其移动

with requests.Session() as s:

在该行之前

data = {'current' : 'afghan_usd' }

然后进行循环,并仔细检查您是否在正确的级别进行访问,如下所示:

last_prices = (r[key]['p'])

产生一个对象而不是简单的数据类型。

请确保在代码中正确缩进,因为它应该在外循环中

for key, value in r.items():

答案 2 :(得分:0)

您正在遍历r.items()并从每个中检索“ p”。项目“当前”没有条目“ p”。