繁体   English   中英

Python(请求)如何仅解析某些 json 数据,如何使这段代码循环(不那么重要)

[英]Python(requests) How to parse only certain json data, How to make this chunk of code loop (not as important)

多亏了Loki才知道!

每 1 秒将print(get_rates()) function 中的数据记录到.txt文件中,因此我创建了一个无限的 while 循环(由 loki 建议)

import requests
from time import sleep
from datetime import datetime,date

old_print = print 
def tstamped_print(*args, **kwargs):
  old_print(datetime.now(), *args, **kwargs)
print = tstamped_print

# Getting rates
def get_rates():
    PREEVURL = requests.get('http://preev.com/pulse/units:btc+usd/sources:bitstamp+kraken')
    DATA = PREEVURL.json()
    RESULT = {}
    for key, value in DATA["btc"]["usd"].items():
        RESULT[key] = (value['last'])
    return RESULT

# Infinite while loop
a = 1
while a < 10:
    print(get_rates(),file=open("btc_price1.txt", "a"))
    print(get_rates())
    sleep(2)
    a = a - 0
else:
    print("loop end")

如果我理解得很好,你想做两件事:

  1. 从此 api 响应中提取比特币汇率
  2. 循环请求并将每个结果存储在文件中以保存历史记录

让我们看看如何做到这一点:

  1. 调用 api 并存储结果

如果您在 python shell 中调用它,您可以查看数据:

>>> import requests
>>> 
>>> url_resp = requests.get('http://preev.com/pulse/units:btc+usd/sources:bitstamp+kraken') # (your url)
>>> data = url_resp.json()
>>> data
{'btc': {'usd': {'bitstamp': {'last': '9503.05', 'volume': '6.27734e+7'}, 'kraken': {'last': '9509.10', 'volume': '4.08549e+7'}}}, 'other': {'slot': None, 'ver': 'b'}}

要真正获取值,只需通过键访问每个字典项:

# Convert the string to float number.
bitsamp_rate = float(data['btc']['usd']['bitstamp']['last'])
kraken_rate = float(data['btc']['usd']['kraken']['last'])

让我们遍历每个交换并将其放入 function 中:

def get_rates():
    url_resp = requests.get('http://preev.com/pulse/units:btc+usd/sources:bitstamp+kraken') # (your url)
    data = url_resp.json()
    result = {}
    for exchange, rates in data['btc']['usd'].items():
        result[exchange] = float(rates['last'])
    return result
  1. 使用 while 循环多次调用 function

我让您决定如何存储数据,您可能还想记录调用 function 的时间。

问题是您的初始 data.json 文件为空。 最简单的方法是在 data.json 文件中放置一个空字典或其他内容。 只要确保 data.json 不是一个空文件。

多亏了Loki才知道!

每 1 秒将来自每个print(get_rates()) function 的数据记录到一个.txt文件中,所以我做了一个无限的 while 循环(由 loki 建议)

import time
import requests
import datetime
from time import sleep
from datetime import datetime,date


'''
print('Enter correct username and password combo to continue')
count = 0
username = '420'
while count < 10:
    username = input('login code: ')
    if username== '420':
        print('Access granted')
        count = 11
        break
    else:
        print('Access denied. Try again.')
        count =- 1
print('====> LOGGED IN','\n')
'''     

today = time.strftime("(%Y-%m-%d %I:%M%p)")
old_print = print
def tstamped_print(*args, **kwargs):
  old_print(today, *args, **kwargs)
print = tstamped_print

# Getting rates
def get_rates():
    PREEVURL = requests.get('http://preev.com/pulse/units:btc+usd/sources:bitstamp+kraken')
    DATA = PREEVURL.json()
    RESULT = {}
    for key, value in DATA["btc"]["usd"].items():
        RESULT[key] = (value['last'])
    return RESULT

# Infinite while loop
a = 1
PREEVURL = requests.get('http://preev.com/pulse/units:btc+usd/sources:bitstamp+kraken')
DATA = PREEVURL.json()
while a < 10:
    print(get_rates(), file=open("btc_price1.txt", "a"))
    print(get_rates())
    sleep(1)
    a = a - 0
else:
    print("loop end")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM