def get_stake_info(code): url = "http://companyinfo.stock.naver.com/v1/company/c1010001.aspx?cmp_cd=%s&target=finsum_more" % ( code) html = requests.get(url).text df_list = pd.read_html(html) #, index_col='주요재무정보') distriPerc = df_list[1].ix[6][1].split('/')[1] shares = df_list[1].ix[6][1].split('/')[0] print(["발행주식수", int(shares.replace('주 ', '').replace(',', ''))]) print([ '유통주식수', int( int(shares.replace('주 ', '').replace(',', '')) * float(distriPerc.replace('%', '')) * 0.01) ]) for i in range(0, len(df_list[4])): if (str(df_list[4].ix[i][0]) != 'nan'): print([ df_list[4].ix[i][0].split('외')[0].strip(), int(round(df_list[4].ix[i][1])) ]) obj = [] obj.append(["발행주식수", int(shares.replace('주 ', '').replace(',', ''))]) obj.append([ '유통주식수', int( int(shares.replace('주 ', '').replace(',', '')) * float(distriPerc.replace('%', '')) * 0.01) ]) for i in range(0, len(df_list[4])): if (str(df_list[4].ix[i][0]) != 'nan'): obj.append([ df_list[4].ix[i][0].split('외')[0].strip(), df_list[4].ix[i][1] ]) for eachObj in obj: #데이터 db insert query = 'INSERT INTO jazzdb.T_STOCK_SHARES_INFO VALUES("%s","%s","%s","%s")' % ( code, eachObj[0], eachObj[1], dp.todayStr('n')) db.insert(query)
AND A.LISTED = 1 """ % (dt) for eachRow in db.select(query): if (len(eachRow) > 0): itemDic[eachRow[1].upper()] = eachRow[0] codeDic[eachRow[0]] = eachRow[1].upper() print("[INFO] 종목명/종목코드를 메모리에 읽어왔습니다, 남은 종목 수: ", len(itemDic.keys())) itemDic, codeDic = {}, {} apiObj = kapi.Kiwoom() apiObj.comm_connect() dateA, dateB = am.api_checkDate(apiObj, dp.todayStr('n')) if (len(sys.argv) > 1): dateA = sys.argv[1] print("PASSED ARGV : ", dateA) # 과거 수집용 else: print("PASSED ARGV : None") # 일 배치 db_readAll(dateA) start = time.time() for itr, eachCode in enumerate( list(codeDic.keys())[:min([len(codeDic), 995])]): try: inserted_data_size = am.api_getDayChart(apiObj, eachCode, dateA)
'select stockcode, stockname from jazzdb.T_STOCK_CODE_MGMT') codeDic = {} # code : name # jazzdb.t_stock_code_mgmt 테이블 # 신규상장종목 및 종목명 변경여부 확인,업데이트하는 소스 # 데이터 출처 : Kiwoom for each in old_list: codeDic[each[0]] = each[1] new_list = apiObj.get_list('p') new_list = new_list + apiObj.get_list('d') for eachcode in new_list: # 신규 상장 종목 인서트 if eachcode[0] != '' and eachcode[0] not in codeDic.keys(): print(eachcode + [dm.todayStr('-')]) db.insert( "INSERT INTO `jazzdb`.`T_STOCK_CODE_MGMT` (`STOCKCODE`, `STOCKNAME`, `MARKET`, `LISTED`, `UPDATEDATE`) VALUES ('%s', '%s', '%s', '%s','%s');" % tuple(eachcode + [dm.todayStr('-')])) print("신규상장 종목", eachcode) # 종목명 바뀐경우 업데이트 if eachcode[0] != '' and eachcode[0] in codeDic.keys( ) and eachcode[1] != codeDic[eachcode[0]]: print("종목명 변경", codeDic[eachcode[0]], eachcode) db.insert( "UPDATE `jazzdb`.`T_STOCK_CODE_MGMT` SET `STOCKNAME` = '%s', `UPDATEDATE` = '%s' WHERE (`STOCKCODE` = '%s')" % (eachcode[1], dm.todayStr('-'), eachcode[0])) apiObj.destroy()
# query = """ SELECT A.STOCKCODE, A.STOCKNAME FROM jazzdb.T_STOCK_CODE_MGMT A WHERE 1=1 AND A.STOCKCODE NOT IN ( SELECT STOCKCODE FROM jazzdb.T_STOCK_SHARES_INFO WHERE DATE = '%s' GROUP BY STOCKCODE ) AND A.LISTED = 1 """ % (dp.todayStr('n')) existsList = [] print("[DEBUG] CRAWLING 시작") for eachRow in db.select(query): print(eachRow) if (len(eachRow) > 0): print(eachRow[0], '/', eachRow[1]) try: get_stake_info(eachRow[0]) except: print("error 발생!")