1

我有一个所有使用相同 json 结构的 URL 列表。我正在尝试使用 grequest 一次从所有 URL 中提取特定的字典对象。尽管我使用的是请求,但我可以使用一个 URL 来完成:

import requests
import json

main_api = 'https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-1ST&type=both&depth=50'

json_data = requests.get(main_api).json()    

Quantity = json_data['result']['buy'][0]['Quantity']
Rate = json_data['result']['buy'][0]['Rate']
Quantity_2 = json_data['result']['sell'][0]['Quantity']
Rate_2 = json_data['result']['sell'][0]['Rate']

print ("Buy")
print(Rate)
print(Quantity)
print ("")
print ("Sell")
print(Rate_2)
print(Quantity_2)

我希望能够为每个 URL 打印上面打印的内容。但我不知道从哪里开始。这是我到目前为止所拥有的:

import grequests
import json


urls = [
    'https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-1ST&type=both&depth=50',
    'https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-2GIVE&type=both&depth=50',
    'https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-ABY&type=both&depth=50',
]


requests = (grequests.get(u) for u in urls)
responses = grequests.map(requests)

我认为它会是这样的,print(response.json(['result']['buy'][0]['Quantity'] for response in responses))但这根本不起作用,python 返回以下内容:print(responses.json(['result']['buy'][0]['Quantity'] for response in responses)) AttributeError: 'list' object has no attribute 'json'. 我对 python 和一般的编码非常陌生,我将不胜感激。

4

1 回答 1

1

您的responses变量是Response对象列表。如果您简单地打印列表

print(responses)

它给了你

[<Response [200]>, <Response [200]>, <Response [200]>]

括号[]告诉你这是一个列表,它包含三个Response对象。

当您键入时,responses.json(...)您是在告诉 python 调用json()列表对象上的方法。然而,该列表不提供这样的方法,只有列表中的对象拥有它。

您需要做的是访问列表中的一个元素并调用json()该元素上的方法。这是通过指定要访问的列表元素的位置来完成的,如下所示:

print(responses[0].json()['result']['buy'][0]['Quantity'])

这将访问responses列表中的第一个元素。

当然,如果要输出许多项目,单独访问每个列表元素是不切实际的。这就是为什么会有循环。使用循环,您可以简单地说:对列表中的每个元素执行此操作。这看起来像这样:

for response in responses:
    print("Buy")
    print(response.json()['result']['buy'][0]['Quantity'])
    print(response.json()['result']['buy'][0]['Rate'])
    print("Sell")
    print(response.json()['result']['sell'][0]['Quantity'])
    print(response.json()['result']['sell'][0]['Rate'])
    print("----")

for-each 循环为列表中的每个元素执行缩进的代码行。当前元素在response变量中可用。

于 2017-08-08T20:11:50.450 回答