feat: 10장 WICS 기준 섹터 정보 추가
This commit is contained in:
parent
083153a367
commit
cafff3682f
@ -1,11 +1,13 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import time
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import requests as rq
|
import requests as rq
|
||||||
|
from tqdm import tqdm
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
import pymysql
|
import pymysql
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
@ -83,7 +85,7 @@ def get_ind_stock_data(biz_day):
|
|||||||
return pd.read_csv(BytesIO(down_ind_sector.content), encoding='EUC-KR')
|
return pd.read_csv(BytesIO(down_ind_sector.content), encoding='EUC-KR')
|
||||||
|
|
||||||
|
|
||||||
def get_total_stock_data(biz_day):
|
def process_for_total_stock(biz_day):
|
||||||
# 업종 분류 현황(코스피, 코스닥)
|
# 업종 분류 현황(코스피, 코스닥)
|
||||||
sector_stk = get_stock_data(biz_day, 'stk')
|
sector_stk = get_stock_data(biz_day, 'stk')
|
||||||
sector_ksq = get_stock_data(biz_day, 'ksq')
|
sector_ksq = get_stock_data(biz_day, 'ksq')
|
||||||
@ -114,10 +116,11 @@ def get_total_stock_data(biz_day):
|
|||||||
'시가총액', '기준일', 'EPS', '선행EPS', 'BPS', '주당배당금', '종목구분']]
|
'시가총액', '기준일', 'EPS', '선행EPS', 'BPS', '주당배당금', '종목구분']]
|
||||||
kor_ticker = kor_ticker.replace({np.nan: None})
|
kor_ticker = kor_ticker.replace({np.nan: None})
|
||||||
kor_ticker['기준일'] = pd.to_datetime(kor_ticker['기준일'])
|
kor_ticker['기준일'] = pd.to_datetime(kor_ticker['기준일'])
|
||||||
return kor_ticker
|
|
||||||
|
save_ticker(kor_ticker)
|
||||||
|
|
||||||
|
|
||||||
def save_db(ticker):
|
def save_ticker(ticker):
|
||||||
con = pymysql.connect(user=os.getenv('DB_USER'),
|
con = pymysql.connect(user=os.getenv('DB_USER'),
|
||||||
passwd=os.getenv('DB_PW'),
|
passwd=os.getenv('DB_PW'),
|
||||||
host=os.getenv('DB_HOST'),
|
host=os.getenv('DB_HOST'),
|
||||||
@ -142,7 +145,56 @@ def save_db(ticker):
|
|||||||
con.close()
|
con.close()
|
||||||
|
|
||||||
|
|
||||||
|
# WICS 기준 섹터정보 크롤링
|
||||||
|
def process_for_wics(biz_day):
|
||||||
|
sector_code = [
|
||||||
|
'G25', 'G35', 'G50', 'G40', 'G10', 'G20', 'G55', 'G30', 'G15', 'G45'
|
||||||
|
]
|
||||||
|
|
||||||
|
data_sector = []
|
||||||
|
|
||||||
|
# 모든 섹터에 대한 데이터 받아서 가공
|
||||||
|
for i in tqdm(sector_code):
|
||||||
|
url = f'''http://www.wiseindex.com/Index/GetIndexComponets?ceil_yn=0&dt={biz_day}&sec_cd={i}'''
|
||||||
|
data = rq.get(url).json()
|
||||||
|
data_pd = pd.json_normalize(data['list'])
|
||||||
|
|
||||||
|
data_sector.append(data_pd)
|
||||||
|
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
|
kor_sector = pd.concat(data_sector, axis=0)
|
||||||
|
kor_sector = kor_sector[['IDX_CD', 'CMP_CD', 'CMP_KOR', 'SEC_NM_KOR']]
|
||||||
|
kor_sector['기준일'] = biz_day
|
||||||
|
kor_sector['기준일'] = pd.to_datetime(kor_sector['기준일'])
|
||||||
|
save_sector(kor_sector)
|
||||||
|
|
||||||
|
|
||||||
|
def save_sector(sector):
|
||||||
|
con = pymysql.connect(user=os.getenv('DB_USER'),
|
||||||
|
passwd=os.getenv('DB_PW'),
|
||||||
|
host=os.getenv('DB_HOST'),
|
||||||
|
port=int(os.getenv('DB_PORT')),
|
||||||
|
db=os.getenv('DB_DB'),
|
||||||
|
charset='utf8')
|
||||||
|
|
||||||
|
mycursor = con.cursor()
|
||||||
|
query = f"""
|
||||||
|
insert into kor_sector (IDX_CD, CMP_CD, CMP_KOR, SEC_NM_KOR, 기준일)
|
||||||
|
values (%s,%s,%s,%s,%s) as new
|
||||||
|
on duplicate key update
|
||||||
|
IDX_CD = new.IDX_CD, CMP_KOR = new.CMP_KOR, SEC_NM_KOR = new.SEC_NM_KOR
|
||||||
|
"""
|
||||||
|
|
||||||
|
args = sector.values.tolist()
|
||||||
|
|
||||||
|
mycursor.executemany(query, args)
|
||||||
|
con.commit()
|
||||||
|
|
||||||
|
con.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
latest_biz_day = get_latest_biz_day()
|
latest_biz_day = get_latest_biz_day()
|
||||||
data = get_total_stock_data(latest_biz_day)
|
process_for_total_stock(latest_biz_day)
|
||||||
save_db(data)
|
process_for_wics(latest_biz_day)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user