我正在使用 grequest 从多个 url 中提取 json 数据。在这里另一个用户的帮助下,我能够让 python 连续打印每个 url 的结果。现在,我想使用 DataNitro 将这些结果打印到 excel 中。这是我现在拥有的代码。
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-AMP&type=both&depth=50',
'https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-ARDR&type=both&depth=50',
]
requests = (grequests.get(u) for u in urls)
responses = grequests.map(requests)
for response in responses:
Cell("A1").value = "Buy"
Cell("A2").value = (response.json()['result']['buy'][0]['Quantity'])
Cell("A3").value = (response.json()['result']['buy'][0]['Rate'])
Cell("A4").value = (response.json()['result']['buy'][1]['Quantity'])
Cell("A5").value = (response.json()['result']['buy'][1]['Rate'])
Cell("A6").value = (response.json()['result']['buy'][2]['Quantity'])
Cell("A7").value = (response.json()['result']['buy'][2]['Rate'])
Cell("A8").value = (response.json()['result']['buy'][3]['Quantity'])
Cell("A9").value = (response.json()['result']['buy'][3]['Rate'])
Cell("A10").value = (response.json()['result']['buy'][4]['Quantity'])
Cell("A11").value = (response.json()['result']['buy'][4]['Rate'])
Cell("A12").value = "Sell"
Cell("A13").value = (response.json()['result']['sell'][0]['Quantity'])
Cell("A14").value = (response.json()['result']['sell'][0]['Rate'])
Cell("A15").value = (response.json()['result']['sell'][1]['Quantity'])
Cell("A16").value = (response.json()['result']['sell'][1]['Rate'])
Cell("A17").value = (response.json()['result']['sell'][2]['Quantity'])
Cell("A18").value = (response.json()['result']['sell'][2]['Rate'])
Cell("A19").value = (response.json()['result']['sell'][3]['Quantity'])
Cell("A20").value = (response.json()['result']['sell'][3]['Rate'])
Cell("A21").value = (response.json()['result']['sell'][4]['Quantity'])
Cell("A22").value = (response.json()['result']['sell'][4]['Rate'])
Cell("A23").value = "----"
这工作得很好,但前提是我注释掉除一个 url 之外的所有内容,否则第一个 url 的结果会被第二个 url 的结果覆盖,这是预期的结果。然而,这不是我想要的。最后,我希望第一个 url 的结果在单元格 A1:A23 中打印,第二个 URL 的结果在单元格 B1:B23 中打印,第三个在单元格 C1:C23 中打印。
这是我尝试过的:
for response in responses:
#print("Buy")
Quantity = [response.json()['result']['buy'][0]['Quantity'],
response.json()['result']['buy'][1]['Quantity'],
response.json()['result']['buy'][2]['Quantity'],
response.json()['result']['buy'][3]['Quantity'],
response.json()['result']['buy'][4]['Quantity']
]
Cell("A1:E5").vertical = Quantity
(注意:我只是在这里尝试数量)。
这不起作用,因为它仅在 A 列中打印第一个 url 的结果,并且不会移动到 B 列以打印后续结果。我尝试使用 切换Cell("A1:E5").vertical = Quantity
,Cell("A1:E5").vertical_range = Quantity
但 python 返回以下错误:
Cell("A1:E5").vertical_range = Quantity
File "27\basic_io.py", line 379, in __setattr__
AttributeError: can't set attribute
我正在考虑使用我的原始设置(即使用Cell("A2").value = (response.json()['result']['buy'][0]['Quantity'])
代码类型)做一些事情,添加类似的内容i = 0
,然后编写最后一个打印行以读取类似的内容,Cell(23,(1+i)).value = "----"
但我无法(精神上)弄清楚如何使它工作. 使用该Cell(23,(1+i)).value = "----"
行,它只会在单元格 B1 中打印“----”,然后它会再次覆盖 A 列中的所有结果,当您看到代码实际在做什么时,这再次是有意义的。
我很茫然,但我觉得答案比较简单,我只是想念它。我浏览了该网站上提到 DataNitro 和https://datanitro.com/docs/的 9 页结果:我找不到答案。我将不胜感激任何帮助!
编辑:我意识到它打印 5 然后移动到相邻列并不重要。我需要做的就是将所有结果打印到 Excel 中而不覆盖自身:这可以是所有结果都显示在一列中,或者所有结果显示在一行中。
我已经尝试过
CellRange((1,1),(1,2)).value = [response.json()['result']['buy'][0]['Quantity'],
response.json()['result']['buy'][0]['Rate']
但我遇到了同样的问题,它只是覆盖了第一个 url 中的数据。提前致谢。