def get_tops(date=None, retry_count=3, pause=0.001): """ 获取每日龙虎榜列表 Parameters -------- date:string 明细数据日期 format:YYYY-MM-DD 默认为空'' retry_count : int, 默认 3 如遇网络等问题重复执行的次数 pause : int, 默认 0 重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 Return ------ DataFrame code:代码 name :名称 pchange:涨跌幅 amount:龙虎榜成交额(万) buy:买入额(万) bratio:占总成交比例 sell:卖出额(万) sratio :占总成交比例 reason:上榜原因 date :日期 """ if date is None: if du.get_hour() < 18: date = du.last_tddate() else: if du.is_holiday(date): return None for _ in range(retry_count): time.sleep(pause) try: request = Request(rv.LHB_URL % (ct.P_TYPE["http"], ct.DOMAINS["em"], date)) text = urlopen(request, timeout=10).read() text = text.decode("GBK") html = lxml.html.parse(StringIO(text)) res = html.xpath('//table[@id="dt_1"]') if ct.PY3: sarr = [etree.tostring(node).decode("utf-8") for node in res] else: sarr = [etree.tostring(node) for node in res] sarr = "".join(sarr) df = pd.read_html(sarr)[0] df.columns = [i for i in range(1, 12)] df = df.apply(_f_rows, axis=1) df = df.fillna(method="ffill") df = df.drop([1, 4], axis=1) df.columns = rv.LHB_COLS df = df.drop_duplicates() df["code"] = df["code"].astype(int) df["code"] = df["code"].map(lambda x: str(x).zfill(6)) df["date"] = date except: pass else: return df raise IOError(ct.NETWORK_URL_ERROR_MSG)
def get_tops(date = None): if date is None: if du.get_hour() < 18: date = du.last_tddate() else: if(du.is_holiday(date)): return None request = Request(rv.LHB_URL%(ct.P_TYPE['http'], ct.DOMAINS['em'], date)) text = urlopen(request, timeout=10).read() text = text.decode('GBK') html = lxml.html.parse(StringIO(text)) res = html.xpath("//table[@id=\"dt_1\"]") if ct.PY3: sarr = [etree.tostring(node).decode('utf-8') for node in res] else: sarr = [etree.tostring(node) for node in res] sarr = ''.join(sarr) df = pd.read_html(sarr)[0] df.columns = [i for i in range(1,12)] df = df.apply(_f_rows, axis=1) df = df.fillna(method='ffill') df = df.drop([1, 4], axis=1) df.columns = rv.LHB_COLS df = df.drop_duplicates() df['code'] = df['code'].astype(int) df['code'] = df['code'].map(lambda x: str(x).zfill(6)) df['date'] = date return df
def top_detail(code, date=None, retry_count= 3, pause= 0.001): """ 根据指定日期,指定股票的龙虎榜交易细节 Parameters -------- code: string 指定股票代码 date: string 指定日期 retry_count : int, 默认 3 如遇网络等问题重复执行的次数 pause : int, 默认 0 重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 Return -------- code:代码 name:名称 bamount:累积买入额(万) bcount:买入次数 samount:累积卖出额(万) scount:卖出次数 net:净额(万) """ if code is None or code == "": return None if date is None: if du.get_hour() < 18: date = du.last_tddate() else: date = du.today() else: if(du.is_holiday(date)): return None time.sleep(pause) try: request = Request(rv.LHB_SINA_URL2%(ct.P_TYPE['http'], ct.DOMAINS['vsf'], code, date)) text = urlopen(request, timeout=10).read() text = text.decode('GBK') text = text.split('details=')[1][2:-2] text = eval(text, type('Dummy', (dict,), dict(__getitem__ = lambda s, n:n))()) text = json.dumps(text) text = json.loads(text) buy_df = pd.DataFrame(text['buy'], columns=rv.LHB_TMP_DETAIL_COLS) buy_df['type'] = 'buy' sell_df = pd.DataFrame(text['sell'], columns=rv.LHB_TMP_DETAIL_COLS) sell_df['type'] = 'sell' #LHB_DETAIL_COLS = ['code', 'type', 'insCode', 'insName', 'bamount', 'samount', 'net'] df = sell_df.append(buy_df) df.columns = rv.LHB_DETAIL_COLS df['bamount'] = df['bamount'].astype(float) df['samount'] = df['samount'].astype(float) df['net'] = df['net'].astype(float) df['date'] = date except Exception as e: print e else: return df raise IOError(ct.NETWORK_URL_ERROR_MSG)
def get_h_data(code, start=None, end=None, autype='qfq', index=False, retry_count=3, pause=0.001): ''' 获取历史复权数据 Parameters ------ code:string 股票代码 e.g. 600848 start:string 开始日期 format:YYYY-MM-DD 为空时取当前日期 end:string 结束日期 format:YYYY-MM-DD 为空时取去年今日 autype:string 复权类型,qfq-前复权 hfq-后复权 None-不复权,默认为qfq retry_count : int, 默认 3 如遇网络等问题重复执行的次数 pause : int, 默认 0 重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 return ------- DataFrame date 交易日期 (index) open 开盘价 high 最高价 close 收盘价 low 最低价 volume 成交量 amount 成交金额 ''' start = du.today_last_year() if start is None else start end = du.today() if end is None else end qs = du.get_quarts(start, end) qt = qs[0] ct._write_head() data = _parse_fq_data(_get_index_url(index, code, qt), index, retry_count, pause) if len(qs) > 1: for d in range(1, len(qs)): qt = qs[d] ct._write_console() df = _parse_fq_data(_get_index_url(index, code, qt), index, retry_count, pause) data = data.append(df, ignore_index=True) if len(data) == 0 or len( data[(data.date >= start) & (data.date <= end)]) == 0: return None data = data.drop_duplicates('date') if index: data = data[(data.date >= start) & (data.date <= end)] data = data.set_index('date') data = data.sort_index(ascending=False) return data if autype == 'hfq': data = data.drop('factor', axis=1) data = data[(data.date >= start) & (data.date <= end)] for label in ['open', 'high', 'close', 'low']: data[label] = data[label].map(ct.FORMAT) data[label] = data[label].astype(float) data = data.set_index('date') data = data.sort_index(ascending=False) return data else: if autype == 'qfq': data = data.drop('factor', axis=1) df = _parase_fq_factor(code, start, end) df = df.drop_duplicates('date') df = df.sort('date', ascending=False) frow = df.head(1) rt = get_realtime_quotes(code) if rt is None: return None if ((float(rt['high']) == 0) & (float(rt['low']) == 0)): preClose = float(rt['pre_close']) else: if du.is_holiday(du.today()): preClose = float(rt['price']) else: if (du.get_hour() > 9) & (du.get_hour() < 18): preClose = float(rt['pre_close']) else: preClose = float(rt['price']) rate = float(frow['factor']) / preClose data = data[(data.date >= start) & (data.date <= end)] for label in ['open', 'high', 'low', 'close']: data[label] = data[label] / rate data[label] = data[label].map(ct.FORMAT) data[label] = data[label].astype(float) data = data.set_index('date') data = data.sort_index(ascending=False) return data else: for label in ['open', 'high', 'close', 'low']: data[label] = data[label] / data['factor'] data = data.drop('factor', axis=1) data = data[(data.date >= start) & (data.date <= end)] for label in ['open', 'high', 'close', 'low']: data[label] = data[label].map(ct.FORMAT) data = data.set_index('date') data = data.sort_index(ascending=False) data = data.astype(float) return data
# arguments can be passed through command line. # usage: python parser.py "qqq spy xme xop" > output.txt if len(sys.argv) > 1: ticker_list = sys.argv[1].split() for t in ticker_list: parser = MyHTMLParser(t) filehandle = urllib.urlopen("http://finance.yahoo.com/q?s=%s" % t) html_string = filehandle.read() parser.feed(html_string) dowj_string = (parser.close()) dowj_string = dowj_string[:-1] dowj = float(dowj_string) * 0.01 print dowj if (du.get_hour() > 15): dowj = 0 import tushare as ts df = ts.get_stock_basics() myselect = [] for i in range(0, len(df)): if (df.irow(i).totalAssets > 1000000 and df.irow(i).totalAssets < 9000000 and df.irow(i).name[0] != '3' and df.irow(i).esp > 1.0): myselect.insert(i, df.irow(i).name) #print df.irow(i).name print len(myselect) print myselect '''
def get_h_data(code, start=None, end=None, autype='qfq', index=False, retry_count=3, pause=0.001): ''' 获取历史复权数据 Parameters ------ code:string 股票代码 e.g. 600848 start:string 开始日期 format:YYYY-MM-DD 为空时取当前日期 end:string 结束日期 format:YYYY-MM-DD 为空时取去年今日 autype:string 复权类型,qfq-前复权 hfq-后复权 None-不复权,默认为qfq retry_count : int, 默认 3 如遇网络等问题重复执行的次数 pause : int, 默认 0 重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 return ------- DataFrame date 交易日期 (index) open 开盘价 high 最高价 close 收盘价 low 最低价 volume 成交量 amount 成交金额 ''' start = du.today_last_year() if start is None else start end = du.today() if end is None else end qs = du.get_quarts(start, end) qt = qs[0] ct._write_head() data = _parse_fq_data(_get_index_url(index, code, qt), index, retry_count, pause) if len(qs)>1: for d in range(1, len(qs)): qt = qs[d] ct._write_console() df = _parse_fq_data(_get_index_url(index, code, qt), index, retry_count, pause) data = data.append(df, ignore_index=True) if len(data) == 0 or len(data[(data.date>=start)&(data.date<=end)]) == 0: return None data = data.drop_duplicates('date') if index: data = data[(data.date>=start) & (data.date<=end)] data = data.set_index('date') data = data.sort_index(ascending=False) return data if autype == 'hfq': data = data.drop('factor', axis=1) data = data[(data.date>=start) & (data.date<=end)] for label in ['open', 'high', 'close', 'low']: data[label] = data[label].map(ct.FORMAT) data[label] = data[label].astype(float) data = data.set_index('date') data = data.sort_index(ascending = False) return data else: if autype == 'qfq': data = data.drop('factor', axis=1) df = _parase_fq_factor(code, start, end) df = df.drop_duplicates('date') df = df.sort('date', ascending=False) frow = df.head(1) rt = get_realtime_quotes(code) if rt is None: return None if ((float(rt['high']) == 0) & (float(rt['low']) == 0)): preClose = float(rt['pre_close']) else: if du.is_holiday(du.today()): preClose = float(rt['price']) else: if (du.get_hour() > 9) & (du.get_hour() < 18): preClose = float(rt['pre_close']) else: preClose = float(rt['price']) rate = float(frow['factor']) / preClose data = data[(data.date >= start) & (data.date <= end)] for label in ['open', 'high', 'low', 'close']: data[label] = data[label] / rate data[label] = data[label].map(ct.FORMAT) data[label] = data[label].astype(float) data = data.set_index('date') data = data.sort_index(ascending = False) return data else: for label in ['open', 'high', 'close', 'low']: data[label] = data[label] / data['factor'] data = data.drop('factor', axis=1) data = data[(data.date>=start) & (data.date<=end)] for label in ['open', 'high', 'close', 'low']: data[label] = data[label].map(ct.FORMAT) data = data.set_index('date') data = data.sort_index(ascending=False) data = data.astype(float) return data
def top_list(date=None, retry_count=3, pause=0.001): """ 获取每日龙虎榜列表 Parameters -------- date:string 明细数据日期 format:YYYY-MM-DD 如果为空,返回最近一个交易日的数据 retry_count : int, 默认 3 如遇网络等问题重复执行的次数 pause : int, 默认 0 重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 Return ------ DataFrame code:代码 name :名称 pchange:涨跌幅 amount:龙虎榜成交额(万) buy:买入额(万) bratio:占总成交比例 sell:卖出额(万) sratio :占总成交比例 reason:上榜原因 date :日期 """ if date is None: if du.get_hour() < 18: date = du.last_tddate() else: date = du.today() else: if (du.is_holiday(date)): return None for _ in range(retry_count): time.sleep(pause) try: request = Request( rv.LHB_URL % (ct.P_TYPE['http'], ct.DOMAINS['em'], date, date)) text = urlopen(request, timeout=10).read() text = text.decode('GBK') text = text.split('_1=')[1] text = eval( text, type('Dummy', (dict, ), dict(__getitem__=lambda s, n: n))()) text = json.dumps(text) text = json.loads(text) df = pd.DataFrame(text['data'], columns=rv.LHB_TMP_COLS) df.columns = rv.LHB_COLS df['buy'] = df['buy'].astype(float) df['sell'] = df['sell'].astype(float) df['amount'] = df['amount'].astype(float) df['Turnover'] = df['Turnover'].astype(float) df['bratio'] = df['buy'] / df['Turnover'] df['sratio'] = df['sell'] / df['Turnover'] df['bratio'] = df['bratio'].map(ct.FORMAT) df['sratio'] = df['sratio'].map(ct.FORMAT) df['date'] = date for col in ['amount', 'buy', 'sell']: df[col] = df[col].astype(float) df[col] = df[col] / 10000 df[col] = df[col].map(ct.FORMAT) df = df.drop('Turnover', axis=1) except: pass else: return df raise IOError(ct.NETWORK_URL_ERROR_MSG)
def top_list(date = None, retry_count=3, pause=0.001): """ 获取每日龙虎榜列表 Parameters -------- date:string 明细数据日期 format:YYYY-MM-DD 如果为空,返回最近一个交易日的数据 retry_count : int, 默认 3 如遇网络等问题重复执行的次数 pause : int, 默认 0 重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 Return ------ DataFrame code:代码 name :名称 pchange:涨跌幅 amount:龙虎榜成交额(万) buy:买入额(万) bratio:占总成交比例 sell:卖出额(万) sratio :占总成交比例 reason:上榜原因 date :日期 """ if date is None: if du.get_hour() < 18: date = du.last_tddate() else: date = du.today() else: if(du.is_holiday(date)): return None for _ in range(retry_count): time.sleep(pause) try: request = Request(rv.LHB_URL%(ct.P_TYPE['http'], ct.DOMAINS['em'], date)) text = urlopen(request, timeout=10).read() text = text.decode('GBK') html = lxml.html.parse(StringIO(text)) res = html.xpath("//table[@id=\"dt_1\"]") if ct.PY3: sarr = [etree.tostring(node).decode('utf-8') for node in res] else: sarr = [etree.tostring(node) for node in res] sarr = ''.join(sarr) df = pd.read_html(sarr)[0] df.columns = [i for i in range(1,12)] df = df.apply(_f_rows, axis=1) df = df.fillna(method='ffill') df = df.drop([1, 4], axis=1) df.columns = rv.LHB_COLS df = df.drop_duplicates() df['code'] = df['code'].astype(int) df['code'] = df['code'].map(lambda x: str(x).zfill(6)) df['date'] = date except: pass else: return df raise IOError(ct.NETWORK_URL_ERROR_MSG)
def get_h_data(code, start=None, end=None, autype='qfq', index=False, retry_count=3, pause=0.001, drop_factor=True): ''' 获取历史复权数据 Parameters ------ code:string 股票代码 e.g. 600848 start:string 开始日期 format:YYYY-MM-DD 为空时取当前日期 end:string 结束日期 format:YYYY-MM-DD 为空时取去年今日 autype:string 复权类型,qfq-前复权 hfq-后复权 None-不复权,默认为qfq retry_count : int, 默认 3 如遇网络等问题重复执行的次数 pause : int, 默认 0 重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 drop_factor : bool, 默认 True 是否移除复权因子,在分析过程中可能复权因子意义不大,但是如需要先储存到数据库之后再分析的话,有该项目会更加灵活 return ------- DataFrame date 交易日期 (index) open 开盘价 high 最高价 close 收盘价 low 最低价 volume 成交量 amount 成交金额 ''' print("本接口即将停止更新,请尽快使用Pro版接口:https://waditu.com/document/2") start = du.today_last_year() if start is None else start end = du.today() if end is None else end qs = du.get_quarts(start, end) qt = qs[0] ct._write_head() data = _parse_fq_data(_get_index_url(index, code, qt), index, retry_count, pause) if data is None: data = pd.DataFrame() if len(qs)>1: for d in range(1, len(qs)): qt = qs[d] ct._write_console() df = _parse_fq_data(_get_index_url(index, code, qt), index, retry_count, pause) if df is None: # 可能df为空,退出循环 break else: data = data.append(df, ignore_index = True) if len(data) == 0 or len(data[(data.date >= start) & (data.date <= end)]) == 0: return pd.DataFrame() data = data.drop_duplicates('date') if index: data = data[(data.date >= start) & (data.date <= end)] data = data.set_index('date') data = data.sort_index(ascending = False) return data if autype == 'hfq': if drop_factor: data = data.drop('factor', axis=1) data = data[(data.date >= start) & (data.date <= end)] for label in ['open', 'high', 'close', 'low']: data[label] = data[label].map(ct.FORMAT) data[label] = data[label].astype(float) data = data.set_index('date') data = data.sort_index(ascending = False) return data else: if autype == 'qfq': if drop_factor: data = data.drop('factor', axis = 1) df = _parase_fq_factor(code, start, end) df = df.drop_duplicates('date') df = df.sort_values('date', ascending = False) firstDate = data.head(1)['date'] frow = df[df.date == firstDate[0]] rt = get_realtime_quotes(code) if rt is None: return pd.DataFrame() if ((float(rt['high']) == 0) & (float(rt['low']) == 0)): preClose = float(rt['pre_close']) else: if du.is_holiday(du.today()): preClose = float(rt['price']) else: if (du.get_hour() > 9) & (du.get_hour() < 18): preClose = float(rt['pre_close']) else: preClose = float(rt['price']) rate = float(frow['factor']) / preClose data = data[(data.date >= start) & (data.date <= end)] for label in ['open', 'high', 'low', 'close']: data[label] = data[label] / rate data[label] = data[label].map(ct.FORMAT) data[label] = data[label].astype(float) data = data.set_index('date') data = data.sort_index(ascending = False) return data else: for label in ['open', 'high', 'close', 'low']: data[label] = data[label] / data['factor'] if drop_factor: data = data.drop('factor', axis=1) data = data[(data.date >= start) & (data.date <= end)] for label in ['open', 'high', 'close', 'low']: data[label] = data[label].map(ct.FORMAT) data = data.set_index('date') data = data.sort_index(ascending = False) data = data.astype(float) return data
def top_list(date = None, retry_count=3, pause=0.001): """ 获取每日龙虎榜列表 Parameters -------- date:string 明细数据日期 format:YYYY-MM-DD 如果为空,返回最近一个交易日的数据 retry_count : int, 默认 3 如遇网络等问题重复执行的次数 pause : int, 默认 0 重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 Return ------ DataFrame code:代码 name :名称 pchange:涨跌幅 amount:龙虎榜成交额(万) buy:买入额(万) bratio:占总成交比例 sell:卖出额(万) sratio :占总成交比例 reason:上榜原因 date :日期 """ if date is None: if du.get_hour() < 18: date = du.last_tddate() else: date = du.today() else: if(du.is_holiday(date)): return None for _ in range(retry_count): time.sleep(pause) try: request = Request(rv.LHB_URL%(ct.P_TYPE['http'], ct.DOMAINS['em'], date, date)) text = urlopen(request, timeout=10).read() text = text.decode('GBK') text = text.split('_1=')[1] text = eval(text, type('Dummy', (dict,), dict(__getitem__ = lambda s, n:n))()) text = json.dumps(text) text = json.loads(text) df = pd.DataFrame(text['data'], columns=rv.LHB_TMP_COLS) df.columns = rv.LHB_COLS df['buy'] = df['buy'].astype(float) df['sell'] = df['sell'].astype(float) df['amount'] = df['amount'].astype(float) df['Turnover'] = df['Turnover'].astype(float) df['bratio'] = df['buy'] / df['Turnover'] df['sratio'] = df['sell'] /df['Turnover'] df['bratio'] = df['bratio'].map(ct.FORMAT) df['sratio'] = df['sratio'].map(ct.FORMAT) df['date'] = date for col in ['amount', 'buy', 'sell']: df[col] = df[col].astype(float) df[col] = df[col] / 10000 df[col] = df[col].map(ct.FORMAT) df = df.drop('Turnover', axis=1) except: pass else: return df raise IOError(ct.NETWORK_URL_ERROR_MSG)
import tushare as ts from sqlalchemy import create_engine from tushare.util import dateu as du import threading import time import TsExt as te from util.util import last_tddate_delta if __name__ == '__main__': engine = create_engine('mysql+pymysql://root:[email protected]/tushare?charset=utf8') td = du.today() if(du.is_holiday(td) | int(du.get_hour()) < 16): dt = du.last_tddate() else: dt = td print(dt) """数据表 stk_lhb_broker_detail 龙虎榜股票营业部买入详细情况 stk_k_line_data 股票K线数据 """ """ 获取股票基本信息 """
def get_h_data(code, start=None, end=None, autype="qfq", index=False, retry_count=3, pause=0.001, drop_factor=True): """ 获取历史复权数据 Parameters ------ code:string 股票代码 e.g. 600848 start:string 开始日期 format:YYYY-MM-DD 为空时取当前日期 end:string 结束日期 format:YYYY-MM-DD 为空时取去年今日 autype:string 复权类型,qfq-前复权 hfq-后复权 None-不复权,默认为qfq retry_count : int, 默认 3 如遇网络等问题重复执行的次数 pause : int, 默认 0 重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 drop_factor : bool, 默认 True 是否移除复权因子,在分析过程中可能复权因子意义不大,但是如需要先储存到数据库之后再分析的话,有该项目会更加灵活 return ------- DataFrame date 交易日期 (index) open 开盘价 high 最高价 close 收盘价 low 最低价 volume 成交量 amount 成交金额 """ start = du.today_last_year() if start is None else start end = du.today() if end is None else end qs = du.get_quarts(start, end) qt = qs[0] ct._write_head() data = _parse_fq_data(_get_index_url(index, code, qt), index, retry_count, pause) if len(qs) > 1: for d in range(1, len(qs)): qt = qs[d] ct._write_console() df = _parse_fq_data(_get_index_url(index, code, qt), index, retry_count, pause) data = data.append(df, ignore_index=True) if len(data) == 0 or len(data[(data.date >= start) & (data.date <= end)]) == 0: return None data = data.drop_duplicates("date") if index: data = data[(data.date >= start) & (data.date <= end)] data = data.set_index("date") data = data.sort_index(ascending=False) return data if autype == "hfq": if drop_factor: data = data.drop("factor", axis=1) data = data[(data.date >= start) & (data.date <= end)] for label in ["open", "high", "close", "low"]: data[label] = data[label].map(ct.FORMAT) data[label] = data[label].astype(float) data = data.set_index("date") data = data.sort_index(ascending=False) return data else: if autype == "qfq": if drop_factor: data = data.drop("factor", axis=1) df = _parase_fq_factor(code, start, end) df = df.drop_duplicates("date") df = df.sort("date", ascending=False) frow = df.head(1) rt = get_realtime_quotes(code) if rt is None: return None if (float(rt["high"]) == 0) & (float(rt["low"]) == 0): preClose = float(rt["pre_close"]) else: if du.is_holiday(du.today()): preClose = float(rt["price"]) else: if (du.get_hour() > 9) & (du.get_hour() < 18): preClose = float(rt["pre_close"]) else: preClose = float(rt["price"]) rate = float(frow["factor"]) / preClose data = data[(data.date >= start) & (data.date <= end)] for label in ["open", "high", "low", "close"]: data[label] = data[label] / rate data[label] = data[label].map(ct.FORMAT) data[label] = data[label].astype(float) data = data.set_index("date") data = data.sort_index(ascending=False) return data else: for label in ["open", "high", "close", "low"]: data[label] = data[label] / data["factor"] if drop_factor: data = data.drop("factor", axis=1) data = data[(data.date >= start) & (data.date <= end)] for label in ["open", "high", "close", "low"]: data[label] = data[label].map(ct.FORMAT) data = data.set_index("date") data = data.sort_index(ascending=False) data = data.astype(float) return data
def lhb_details(retry_count=3, pause=0.001, code=None, date=None): """ 获取最近一个交易日龙虎榜上榜个股的交易详情. 包括买1-5和卖1-5的买入及卖出量,营业部名称. 可选参数: 证券代码(code): 指定代码用于只获取该证券的交易详情.省略的话会返回当日所有上榜证券的交易详情 日期(date): 获取指定日期的交易详情.默认为最近一个交易日 返回值: ---------- code:股票代码 name:股票名称 date:交易日期 买1-5营业部名称及买入和卖出额及净额(万) 卖1-5营业部名称及买入和卖出额净额(万) """ if date is None: if du.get_hour() < 18: date = du.last_tddate() else: date = du.today() else: if (du.is_holiday(date)): return None if code is None: print('请输入股票代码,比如: lhb_details(000001)') raise SystemExit(5) lhb_details_url = 'http://vip.stock.finance.sina.com.cn/q/api/jsonp.php/var%20details=/InvestConsultService.getLHBComBSData?symbol=%s&tradedate=%s&type=01' text = urlopen(lhb_details_url % (code, date), timeout=10).read() text = text.decode('GBK') text = text.split('details=')[1] text = eval(text, type('Dummy', (dict, ), dict(__getitem__=lambda s, n: n))()) text = json.dumps(text) text = json.loads(text) ## text['buy'] = list of dicts ## text['sell'] = list of dicts #for i in range(len(text['buy'])): # for key in text['buy'][i].keys(): # print(text['buy'][i][key],end=' ') # print() #SYMBOL sellAmount buyAmount comCode type netAmount comName #000973 7.6802 2101.4900 80291363 01 2093.8098 浙商证券股份有限公司临安万马路证券营业部 #000973 0.0000 1777.2700 80348499 01 1777.27 华泰证券股份有限公司浙江分公司 #000973 317.3780 2069.5400 80127954 01 1752.162 安信证券股份有限公司南昌胜利路证券营业部 #000973 0.9050 1389.3300 80564863 01 1388.425 华鑫证券有限责任公司郑州普惠路证券营业部 #000973 39.0354 1239.5100 80034811 01 1200.4746 财通证券股份有限公司绍兴人民中路证券营业部 print('%4s %6s %10s %10s %10s %s' % ('买入榜', '股票代码', '卖出额(万)', '买入额(万)', '买入净额(万)', '营业部名称')) for i in range(len(text['buy'])): print('%-4d %-8s %-10s %-10s %-12s %s' %(i+1,text['buy'][i]['SYMBOL'],text['buy'][i]['sellAmount'],\ text['buy'][i]['buyAmount'],text['buy'][i]['netAmount'],text['buy'][i]['comName'])) #1 000973 7.6802 2101.4900 2093.8098 浙商证券股份有限公司临安万马路证券营业部 #2 000973 0.0000 1777.2700 1777.27 华泰证券股份有限公司浙江分公司 #3 000973 317.3780 2069.5400 1752.162 安信证券股份有限公司南昌胜利路证券营业部 #4 000973 0.9050 1389.3300 1388.425 华鑫证券有限责任公司郑州普惠路证券营业部 #5 000973 39.0354 1239.5100 1200.4746 财通证券股份有限公司绍兴人民中路证券营业部 print('%4s %6s %10s %10s %10s %s' % ('卖出榜', '股票代码', '卖出额(万)', '买入额(万)', '买入净额(万)', '营业部名称')) for i in range(len(text['sell'])): print('%-4d %-8s %-10s %-10s %-12s %s' %(i+1,text['sell'][i]['SYMBOL'],text['sell'][i]['sellAmount'],\ text['sell'][i]['buyAmount'],text['sell'][i]['netAmount'],text['sell'][i]['comName']))