def query_stock_industry(code='', date=''): rs = bs.query_stock_industry(code, date) while BaoStock.retried_num < BaoStock.RETRY_MAX_NUM and rs.error_code != '0': sleep(BaoStock.RETRY_DELAY_S) rs = bs.query_stock_industry(code, date) BaoStock.retried_num += 1 assert('0' == rs.error_code) BaoStock.retried_num = 0 return BaoStock.rs_to_list(rs)
def query_stock_industry(code='', date=''): rs = bs.query_stock_industry(code, date) while Stock.retried_num < Stock.RETRY_MAX_NUM and rs.error_code != '0': sleep(Stock.RETRY_DELAY_S) rs = bs.query_stock_industry(code, date) Stock.retried_num += 1 if '0' == rs.error_code: Stock.retried_num = 0 return Stock.rs_to_list(rs)
def query_stock_industry(code=None, date=None): """ 行业分类 方法说明:通过API接口获取行业分类信息,更新频率:每周一更新。 返回类型:pandas的DataFrame类型。 参数含义: code:A股股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。可以为空; date:查询日期,格式XXXX-XX-XX,为空时默认最新日期。 """ lg = bs.login() if lg.error_code != '0': logger.error('login respond error_msg:' + lg.error_msg) rs = bs.query_stock_industry(code, date) if rs.error_code != '0': logger.error('query_stock_industry respond error_msg:' + rs.error_msg) industry_list = [] while (rs.error_code == '0') & rs.next(): industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) bs.logout() return result
def stock_industry(self): ''' Return a DataFrame containing all stock industry data 戳下面这个链接 http://baostock.com/baostock/index.php/行业分类 ''' return get_data(bs.query_stock_industry())
def get(self, request, *args, **kwargs): queryset = SharesCategory.objects.all() if len(queryset) <= 0: lg = bs.login() rs = bs.query_stock_industry() # print(rs) data_list = [] while (rs.error_code == '0') & rs.next(): data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) result1 = pd.DataFrame(result['industry']) result1['count'] = pd.Series(np.random.randint(1, 2, 4061)) result1['industryClassification'] = result[ 'industryClassification'] result1 = result1.groupby('industry').sum() shares_cate_list = [] for index, row in result1.iterrows(): cate_obj = SharesCategory(industry=index, industryClassification='申万一级行业', count=row['count']) cate_obj.save() shares_cate_list.append({ 'industry': index, 'industryClassification': '申万一级行业', 'count': float(row['count']) }) bs.logout() return JsonResponse(shares_cate_list, safe=False) else: return JsonResponse([], safe=False)
def hangye(): # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 获取行业分类数据 rs = bs.query_stock_industry() # rs = bs.query_stock_basic(code_name="浦发银行") print('query_stock_industry error_code:' + rs.error_code) print('query_stock_industry respond error_msg:' + rs.error_msg) # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) # 结果集输出到csv文件 result.to_csv("C:\\gupiao\\行业分类.csv", encoding="gbk", index=False) print(result) # 登出系统 bs.logout()
def create_stock_industry(): """ BS-创建行业分类 """ # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 获取行业分类数据 rs = bs.query_stock_industry() print('query_stock_industry error_code:' + rs.error_code) print('query_stock_industry respond error_msg:' + rs.error_msg) # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) dtype = { 'updateDate': String(10), 'code': String(9), 'code_name': String(10), 'industry': String(4), 'industryClassification': String(6) } result.to_sql('odl_bs_stock_industry', engine, schema=CQ_Config.DB_SCHEMA, if_exists='replace', index=False, dtype=dtype) # 登出系统 bs.logout()
def bao_query_stock_industry() -> pd.DataFrame: """ 获取行业分类信息 :return: """ df = bao.query_stock_industry().get_data() df['code'] = df['code'].apply(lambda x: ts_code(x)) df.set_index(keys='code', drop=False, inplace=True) return df
def get_stock_industry(): rs = BS.query_stock_industry() industry_list = [] while (rs.error_code == '0') & rs.next(): industry_list.append(rs.get_row_data()) result = PD.DataFrame(industry_list, columns=rs.fields) print(result) return result
def queryStockIndustry(code,date=''): rs = bs.query_stock_industry(code=code,date=date) # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) return result
def list_stocks(): bs.login() global g_codes rs = bs.query_stock_industry() industry_list = [] while (rs.error_code == '0') & rs.next(): industry_list.append(rs.get_row_data()) df_codes = pd.DataFrame(industry_list, columns=rs.fields) df_codes.to_csv('./codes.csv', encoding='utf-8', index=False) bs.logout() return df_codes
def get_hangye_info(self): # 获取行业分类数据 rs = bs.query_stock_industry() print('query_stock_industry error_code:' + rs.error_code) print('query_stock_industry respond error_msg:' + rs.error_msg) # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result2 = pd.DataFrame(industry_list, columns=rs.fields) return result2
def query_stock_industry(self,code = None, date = None): ''' code:A股股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。可以为空; date:查询日期,格式XXXX-XX-XX,为空时默认最新日期。 ''' rs = bs.query_stock_industry(code = code, date = date) self.log('query_stock_industry respond error_msg:', rs) industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) return result
def updateIndustry(conn, date): data_df = pd.DataFrame() codes = comm.getAllCode(conn) for item in tqdm(codes, desc='拉取行业分类'): code = item[0] name = item[1] rs = bs.query_stock_industry(code) data_df = data_df.append(rs.get_data()) pbar = tqdm(total=data_df.shape[0], desc='行业分类入库中') for i, row in data_df.iterrows(): k = comm.list2lower(row.index.tolist()) v = row.values.tolist() comm.upsertRow(conn, 'stock_industry', k, v, 'code') pbar.update(1)
def bs_save_stock_industry(): ''' 获取行业信息 :return: ''' bs.login() rs = bs.query_stock_industry() industry_list = [] while (rs.error_code == '0') & rs.next(): industry_list.append(rs.get_row_data()) engine = create_engine( 'mysql+pymysql://root:root@localhost:3306/stock_quant?charset=utf8') result = pd.DataFrame(industry_list, columns=rs.fields) result.to_sql('bs_stock_industry', engine, index=True) bs.logout()
def download_industry(date): rs = bs.query_stock_industry('', date) industry_list = [] while (rs.error_code == '0') & rs.next(): industry_list.append(rs.get_row_data()) connect = pymssql.connect('localhost', 'sa', '12345', 'astock') # 建立连接 cursor = connect.cursor() # 创建一个游标对象,python里的sql语句都要通过cursor来执行 for industry in industry_list: sql = 'if not exists (select *from all_stocks where code =\'%s\') insert into all_stocks(updateDate,code,code_name,industry,industryClassification) values (\'%s\',\'%s\',\'%s\',\'%s\',\'%s\') ' % ( industry[1], industry[0], industry[1], industry[2], industry[3], industry[4]) # print(sql) cursor.execute(sql) connect.commit() cursor.close() connect.close()
def get_basic_code_info(self, kechuang=False): rs = bs.query_stock_basic() print('query_stock_basic respond error_msg:' + rs.error_msg) # 打印结果集 data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) # 结果集输出到csv文件 # result.to_csv("D:/stock_basic.csv", encoding="gbk", index=False) result['only_code'] = result['code'].str.lower().str.split('.').str[1] result_stock = result[result['type'] == '1'] if kechuang: pass else: result_stock = result_stock[(result_stock['only_code'].str[:2] != '30')] # result_stock[('st' not in result_stock['code_name'].str.lower() )] # result_stock['code_name']=result_stock['code_name'].str.lower() # result_stock['st股'] = result_stock['code_name'].apply(lambda x: True if 'st' in str(x) else False ) # print(result_stock[result_stock['st股'] == False]) # result[((result['code'].str[:2] == 'sh')&(result['only_code'].str[:2] == '60'))|((result['code'].str[:2] == 'sz')&(result['only_code'].str[:2] == '00'))]) result_stock.reset_index(drop=True, inplace=True) # 获取行业分类数据 rs = bs.query_stock_industry() print('query_stock_industry error_code:' + rs.error_code) print('query_stock_industry respond error_msg:' + rs.error_msg) # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result2 = pd.DataFrame(industry_list, columns=rs.fields) result = pd.merge( result_stock, result2[['code', 'industry', 'industryClassification']], how='left', on=['code']) # print(result.keys()) # exit() return result
def get_stock_industry(code=None, date=None): # 获取行业分类数据 rs = bs.query_stock_industry(code=code, date=date) # rs = bs.query_stock_basic(code_name="浦发银行") if rs.error_code != '0': print('query_stock_industry respond error_code::' + rs.error_msg) login() return get_stock_industry(code, date) # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) # 结果集输出到csv文件 return result
def dispatch_request(self): post_data = request.get_json() code = post_data.get('code', '') date = post_data.get('date', '') attr_fields = post_data.get('attr_fields', None) rs = bs.query_stock_industry(code=code, date=date) industry_list = [] while (rs.error_code == '0') & rs.next(): industry_list.append(rs.get_row_data()) fields = ['updateDate', 'code', 'code_name', 'industry', 'industryClassification'] data = jsonWrapper(industry_list, fields) result = { 'code': 200 if rs.error_code == '0' else rs.error_code, 'data': list(map(lambda x: { attr: x.get(attr, '') for attr in attr_fields }, data)) if attr_fields else data, 'msg': rs.error_msg } self.logout() return jsonify(result)
def get_hangye(): """ 获取行业信息,返回字典 {code: bkname, ...} :return: """ rs = bs.query_stock_industry() data_list = [] while (rs.error_code == '0') & rs.next(): d = {} r = rs.get_row_data() for k_i in range(len(r)): d[rs.fields[k_i]] = r[k_i] w = {} w['code'] = d['code'][3:] w['name'] = d['code_name'] w['hangye'] = d['industry'] data_list.append(w) return data_list
def download_all_k_line_data(date): print(date) connect = pymssql.connect('localhost', 'sa', '12345', 'astock') cursor = connect.cursor() delsql = 'delete day_k_line where date= \'%s\'' % (date) print(delsql) cursor.execute(delsql) connect.commit() cursor.close() connect.close() rs = bs.query_stock_industry('', date) industry_list = [] while (rs.error_code == '0') & rs.next(): industry_list.append(rs.get_row_data()) # #需要借助行业代码循环 for industry in industry_list: download_k_line_data(industry[1], date)
def save_stock_classify_info(self): rs = bs.query_stock_industry() print('query_history_k_data_plus respond error_code:' + rs.error_code) print('query_history_k_data_plus respond error_msg:' + rs.error_msg) industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) i = 0 with open('stock_list_simple.txt', 'w') as fd: for _ in industry_list: fd.write(_[1] + '\n') i = i + 1 print("Write done!!", i) classify_result = self.make_classify_info(industry_list) result = pd.DataFrame(industry_list, columns=rs.fields) result.to_csv("stock_industry.csv", index=False) return classify_result
def inportIndustryData(name='tb_today_industry', code=None, date=None): configger.init() # 显示登陆返回信息 # 结果集输出到csv文件 con = configger.engine try: sql = configger.lastOperateTimeSql.format(name) lastTime = pd.read_sql(sql=sql, con=con).iloc[0, 0] print(lastTime) except: print('没有操作数据') if (lastTime == None): lastTime = pd.to_datetime('1990-1-1 00:00:00') if (needUpdate(lastTime, datetime.now(), True) == True): lg = bs.login() # 获取行业分类数据 rs = bs.query_stock_industry() # rs = bs.query_stock_basic(code_name="浦发银行") # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) result['date'] = datetime.now().date() result.to_sql(name=name, con=con, if_exists='append', index=False) bs.logout() operation = pd.DataFrame() operation.loc[0, 'name'] = name operation.loc[0, 'updateTime'] = datetime.now().date() operation.to_sql(name='tb_operation_time', con=con, if_exists='append', index=False) print('industry_data_import_ok') else: print('无需插入')
def get_stock_industry(stock_code): # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 获取证券基本资料 rs = bs.query_stock_industry(code=stock_code) # rs = bs.query_stock_basic(code_name="浦发银行") # 支持模糊查询 print('query_stock_industry respond error_code:' + rs.error_code) print('query_stock_industry respond error_msg:' + rs.error_msg) # 打印结果集 data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) bs.logout() return result
def get_all_stock_industries(): lg = bs.login() print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 获取行业分类数据 rs = bs.query_stock_industry(date='2020-08-01') # rs = bs.query_stock_basic(code_name="浦发银行") print('query_stock_industry error_code:' + rs.error_code) print('query_stock_industry respond error_msg:' + rs.error_msg) # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) # 结果集输出到csv文件 result.to_csv(ConfigUtils.get_stock("STOCK_INDUSTRY"), index=False) print(result) # 登出系统 bs.logout()
def UpdateIndustryData(code='', date=''): # 登陆系统 lg = bs.login() # 显示登陆返回信息 # 获取行业分类数据 rs = bs.query_stock_industry(code, date) # rs = bs.query_stock_basic(code_name="浦发银行") needUpdate = tableNeedUpdate('tb_industry_information') print(needUpdate) if (needUpdate == True): # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) # 结果集输出到csv文件 # result.to_csv("D:/stock_industry.csv", encoding="gbk", index=False) result.rename(columns={ 'code_name': '名称', 'industry': '行业', 'industryClassification': '所属行业类别' }, inplace=True) # 登出系统 bs.logout() print(result) try: result.to_sql(name='tb_industry_information', con=configger.engine, if_exists='append', index=False) saveOperationTime('tb_industry_information') except: print('industry 更新失败') return result return pd.DataFrame()
def get(self, request, *args, **kwargs): queryset = Shares.objects.all() if len(queryset) <= 0: lg = bs.login() rs = bs.query_stock_industry() data_list = [] shares_list = [] while (rs.error_code == '0') and rs.next(): data_list.append(rs.get_row_data()) for index, item in enumerate(data_list): shares_obj = Shares(code=item[1], code_name=item[2], industry=item[3]) shares_obj.save() shares_list.append(({ 'code': item[1], 'code_name': item[2], 'industry': item[3] })) bs.logout() return JsonResponse(shares_list, safe=False) else: return JsonResponse([], safe=False)
def basic_mian(): info = request.values.get("data") stocknumber = tostockcode(info) stock_code = stocknumber[0:2] + '.' + stocknumber[2:] startdate = time.strftime('%Y-%m-%d', time.localtime(time.time() - 20 * 24 * 60 * 60)) #获取近20天的那些率 enddate = time.strftime('%Y-%m-%d', time.localtime(time.time())) # 登陆系统 lg = bs.login() rs2 = bs.query_history_k_data_plus( stock_code, "date,code,close,peTTM,pbMRQ,psTTM,pcfNcfTTM", start_date=startdate, end_date=enddate, frequency="d", adjustflag="3") list2 = [] while (rs2.error_code == '0') & rs2.next(): # 获取一条记录,将记录合并在一起 list2.append(rs2.get_row_data()) result2 = pd.DataFrame(list2, columns=rs2.fields) peTTM = result2[['peTTM']] #每天的滚动市盈率 psTTM = result2[['psTTM']] # 每天的滚动市销率 pcfNcfTTM = result2[['pcfNcfTTM']] # 每天的滚动市现率 pbMRQ = result2[['pbMRQ']] #每天的滚动市净率 ###获取行业分类数据 rs3 = bs.query_stock_industry(code=stock_code) list3 = [] while (rs3.error_code == '0') & rs3.next(): # 获取一条记录,将记录合并在一起 list3.append(rs3.get_row_data()) result3 = pd.DataFrame(list3, columns=rs3.fields) hangye = result3 ####添加 #industryinfo=getindustry(str(np.array(hangye)[0,3])) stockinfo = getstock(stocknumber) # 登出系统 bs.logout() dic = { 'peTTM': [], 'psTTM': [], 'pcfNcfTTM': [], 'pbMRQ': [], 'hangye': [], 'stockinfo': {} } dic['peTTM'] = np.array(peTTM).reshape(1, len(np.array(peTTM))).tolist()[0] dic['peTTM'] = list( map(lambda x: eval('%.4f' % x), map(eval, dic['peTTM']))) #list(map(eval, dic['peTTM'])) dic['psTTM'] = np.array(psTTM).reshape(1, len(np.array(psTTM))).tolist()[0] dic['psTTM'] = list( map(lambda x: eval('%.4f' % x), map(eval, dic['psTTM']))) #list(map(eval, dic['psTTM'])) dic['pcfNcfTTM'] = np.array(pcfNcfTTM).reshape(1, len( np.array(pcfNcfTTM))).tolist()[0] dic['pcfNcfTTM'] = list( map(lambda x: eval('%.4f' % x), map(eval, dic['pcfNcfTTM']))) #list(map(eval, dic['pcfNcfTTM'])) dic['pbMRQ'] = np.array(pbMRQ).reshape(1, len(np.array(pbMRQ))).tolist()[0] dic['pbMRQ'] = list( map(lambda x: eval('%.4f' % x), map(eval, dic['pbMRQ']))) #list(map(eval, dic['pbMRQ'])) dic['hangye'] = np.array(hangye).tolist()[0] dic['stockinfo'] = np.array(stockinfo).tolist() dic['stockinfo']['price'] = float(dic['stockinfo']['price']) dic['stockinfo']['changePercent'] = float( dic['stockinfo']['changePercent']) dic['stockinfo']['volume'] = float(dic['stockinfo']['volume']) dic['stockinfo']['turnover'] = float(dic['stockinfo']['turnover']) return json.dumps(dic, ensure_ascii=False)
# 王琰的python编写 # 开发时间:2021/5/15 16:34 import baostock as bs import pandas as pd # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 获取行业分类数据 rs = bs.query_stock_industry() # rs = bs.query_stock_basic(code_name="浦发银行") print('query_stock_industry error_code:' + rs.error_code) print('query_stock_industry respond error_msg:' + rs.error_msg) # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) # 结果集输出到csv文件 result.to_csv("D:/stock_industry.csv", encoding="gbk", index=False) print(result) # 登出系统 bs.logout()
def get_stock_industry(self, code): result = baostock.query_stock_industry(code).get_row_data() industry = result[3] return industry