无法获取json中存储的某些项的相应值

时间:2018-02-18 09:22:39

标签: python json python-3.x web-scraping

我已经在python中编写了一个脚本,以便从网页上获取json响应中的不同项目。通过收集不同物品的名称,我获得了部分成功。但是,我希望得到不同的价格。在解析每个项目的相应值时,我被卡住了。对此的任何帮助将受到高度赞赏。

网站地址:web_link

脚本我尝试过:

import requests

res = requests.get("replace_with_above_url")
for items in res.json():
    for name in items:
        print(name)

这就是结构的样子:

[{"BTC":{"sellPrice":711500,"buyPrice":711150,"lastTradePrice":711150}},{"XRP":{"sellPrice":76.7,"buyPrice":76.6,"lastTradePrice":76.6}},{"NEO":{"sellPrice":8769,"buyPrice":8651,"lastTradePrice":8769}},{"GAS":{"sellPrice":3140,"buyPrice":3105,"lastTradePrice":3105}},{"ETH":{"sellPrice":63500,"buyPrice":62450.01,"lastTradePrice":63500}},{"XLM":{"sellPrice":30.78,"buyPrice":30.61,"lastTradePrice":30.78}}]

输出I(仅):

BTC
XRP
NEO

输出我打算得到:

BTC 711500 711150 711150
XRP 76.7    76.6   76.6
so on ---

2 个答案:

答案 0 :(得分:1)

使用此:

r = requests.get('https://bitbns.com/order/getTickerAll')
for item in r.json():
    for key, value in item.items():
        print(key, value['sellPrice'], value['buyPrice'], value['lastTradePrice'])

输出:

BTC 705000 704000 704000
XRP 72.3 72.29 72.29
NEO 8452 8450 8452
GAS 3060 3024 3024
ETH 61000 60700 60700
XLM 29.8 29.78 29.78

来自documentation

  

循环遍历词典时,可以使用items()方法同时检索键和相应的值。

答案 1 :(得分:1)

我觉得问题是你需要了解你正试图在第二个循环中打印。如果在第一次迭代中打印,则可以看到以下结果。

import requests
res = requests.get("https://bitbns.com/order/getTickerAll")
for items in res.json():
    print(items)

{'BTC': {'sellPrice': 703500, 'buyPrice': 702000, 'lastTradePrice': 702000}}
{'XRP': {'sellPrice': 72.89, 'buyPrice': 72.7, 'lastTradePrice': 72.9}}
{'NEO': {'sellPrice': 8480, 'buyPrice': 8400, 'lastTradePrice': 8400}}
{'GAS': {'sellPrice': 3000, 'buyPrice': 2990, 'lastTradePrice': 2990}}
{'ETH': {'sellPrice': 61499, 'buyPrice': 60800, 'lastTradePrice': 60800}}
{'XLM': {'sellPrice': 29.6, 'buyPrice': 29.53, 'lastTradePrice': 29.53}}

现在您需要遍历第二个对象,因此您可以使用以下代码。

import requests
res = requests.get("https://bitbns.com/order/getTickerAll")
for item in res.json():
    for key,value in item.items():
        print(key, value)
        for subkey,subvalue in value.items():
            print(subkey,subvalue) 

第二个和第三个for循环即将到来,因为Python假定字典按定义具有任意数量的键。您可以根据需要继续向下钻取,也可以按照上一个答案获得所需的确切结果。