ok及其他交易所获取数据方式
from urllib.request import urlopen, Request import json import pandas as pd pd.set_option('expand_frame_repr', False) # 当列太多时不换行 # 抓取交易对的symbol symbol = 'ltc_usdt' # 构建url # url = 'https://www.okex.com/api/v1/ticker.do?symbol=' + symbol url = 'https://www.okex.com/api/v1/ticker.do?symbol=%s' % symbol # # 抓取数据 # content = urlopen(url=url, timeout=15).read() # content = content.decode('utf-8') # 抓取数据,带有浏览器伪装 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} request = Request(url=url, headers=headers) content = urlopen(request, timeout=15).read() content = content.decode('utf-8') # 将数据转化为dataframe json_data = json.loads(content) df = pd.DataFrame(json_data, dtype='float') # 对df进行处理 df = df[['ticker']].T print(df)
其他交易所获取数据方式
from urllib.request import urlopen, Request import json import pandas as pd pd.set_option('expand_frame_repr', False) # 当列太多时不换行 # ===okex交易所 url = 'https://www.okex.com/api/v1/ticker.do?symbol=ltc_usdt' # tick数据 # url = 'https://www.okex.com/api/v1/kline.do?symbol=btc_usdt&type=30min' # k线数据 # ===binance交易所 # url = 'https://api.binance.com/api/v1/ticker/24hr' # tick数据 # url = 'https://api.binance.com/api/v1/klines?symbol=LTCBTC&interval=1h' # k线数据 # ===huobipro交易所 # url = 'https://api.huobipro.com/market/detail/merged?symbol=btcusdt' # tick数据 # url = 'https://api.huobipro.com/market/history/kline?symbol=btcusdt&period=1min' # k线数据 # # 抓取数据 # content = urlopen(url=url, timeout=15).read() # content = content.decode('utf-8') # 抓取数据,带有浏览器伪装 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} request = Request(url=url, headers=headers) content = urlopen(request, timeout=15).read() content = content.decode('utf-8') print(content)
下面我们根据方法进行封装函数 Get_data_from_exchange.py
from urllib.request import urlopen, Request import json import pandas as pd pd.set_option('expand_frame_repr', False) # 当列太多时不换行 # ===抓取数据 def get_url_content(url, max_try_number=5): try_num = 0 while True: try: return urlopen(url, timeout=15).read().strip() except Exception as http_err: print(url, "抓取报错", http_err) try_num += 1 if try_num >= max_try_number: print("尝试失败次数过多,放弃尝试") return None # ===抓取数据,带有浏览器伪装 def get_url_content2(url, max_try_number=5): try_num = 0 while True: try: headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} request = Request(url=url, headers=headers) content = urlopen(request, timeout=15).read() return content except Exception as http_err: print(url, "抓取报错", http_err) try_num += 1 if try_num >= max_try_number: print("尝试失败次数过多,放弃尝试") return None # ===okex # 获取ticker数据 def get_list_ticker_from_okex(symbol_list=['btc_usdt', 'ltc_usdt']): # 创建一个空的df df = pd.DataFrame() # 遍历每一个symbol for symbol in symbol_list: # 构建url url = 'https://www.okex.com/api/v1/ticker.do?symbol=%s' % symbol # 抓取数据 content = get_url_content2(url, 5) if content is None: # 当返回内容为空的时候,跳过本次循环 continue # 将数据转化为dataframe json_data = json.loads(content.decode("utf-8")) _df = pd.DataFrame(json_data, dtype='float') _df = _df[['ticker']].T _df['symbol'] = symbol # 合并数据到df中 df = df.append(_df, ignore_index=True) # 对df进行最后整理 df = df[['symbol', 'last', 'buy', 'sell', 'high', 'low', 'vol']] return df # 获取candle数据 def get_candle_from_okex(symbol='ltc_usdt', kline_type='1min'): # 构建url url = 'https://www.okex.com/api/v1/kline.do?symbol=%s&type=%s' % (symbol, kline_type) # 抓取数据 content = get_url_content2(url) if content is None: # 当返回内容为空的时候,跳过本次循环 return pd.DataFrame() # 将数据转化为dataframe json_data = json.loads(content.decode("utf-8")) df = pd.DataFrame(json_data, dtype='float') # 整理dataframe df.rename(columns={0: 'candle_begin_time', 1: 'open', 2: 'high', 3: 'low', 4: 'close', 5: 'volume'}, inplace=True) df['candle_begin_time'] = pd.to_datetime(df['candle_begin_time'], unit='ms') df['candle_begin_time_GMT8'] = df['candle_begin_time'] + pd.Timedelta(hours=8) return df df = get_list_ticker_from_okex(symbol_list=['btc_usdt', 'ltc_usdt', 'eth_usdt']) print(df) df = get_candle_from_okex(symbol='btc_usdt', kline_type='30min') print(df)