1.선물, 우선주 등을 제외한 코스피와 코스닥시장 상장기업의 사업보고서로부터 연도별 배당 정보 수집
2.배당정보는 주당 현금배당금, 주당 순이익(EPS: Earning Per Share)를 의미
3.수집한 주가당 순이익과 이전에 수집한 주가를 이용해 주가 수익비율(PER: Price Earning Ratio)를 계산
OpenDart API 신청 : https://opendart.fss.or.kr/
전자공시 OPENDART 시스템
--> 시스템 점검으로 모든 서비스 이용이 일시적으로 중단되어니 양해 부탁드립니다. 시스템 점검 일정 2019년12월30일 23:00 ~ 12월31일 24:00 (1시간) *상기 작업 시간은 사정에 의해 변경 될 수 있습니
opendart.fss.or.kr
dart 객체 생성
# Dart Api Key
my_api = '신청한APIkey'
dart = OpenDartReader(my_api)
미리 저장해 둔 종목정보에서 Code와 Name 하는 함수
def get_stock_list():
engine = create_engine('mysql+pymysql://~~~~~')
stock_list = pd.read_sql('select Code, Name from stock_info_krx order by Name;', con=engine)
engine.dispose()
return stock_list
종목명과 해당 연도를 넣으면 배당금 정보를 반환하는 함수 (전전기, 전기, 현재)
def find_divdends(stock_name, year):
try:
stock_name_report = dart.report(stock_name, "배당", year, "11011") # 데이터 가져오기
except:
stock_name_report = None
if stock_name_report is None: # 리포트가 없다면 (참고: 리포트가 없으면 None을 반환함)
return np.nan, np.nan, np.nan
else:
# 필터링: se컬럼이 주당 현금배당금(원)인 첫 번째 행만 가져옴
try:
stock_name_report = stock_name_report.loc[(stock_name_report['se'] == '주당 현금배당금(원)')].iloc[0]
thstrm_divdends = int(stock_name_report['thstrm'].replace('-', '0').replace(',', ''))
frmtrm_divdends = int(stock_name_report['frmtrm'].replace('-', '0').replace(',', ''))
lwfr_divdends = int(stock_name_report['lwfr'].replace('-', '0').replace(',', ''))
return lwfr_divdends, frmtrm_divdends, thstrm_divdends
except:
return np.nan, np.nan, np.nan
종목를 순회하면 배당금정보 수집하여 div_data에 모음
stock_list = get_stock_list()
stock_name_list = stock_list["Name"].values
div_data = []
for idx, stock_name in enumerate(stock_name_list):
print(idx + 1, "/", len(stock_name_list)) # 현재까지 진행된 상황 출력
print(stock_name)
record = [stock_name] # 레코드 초기화
for year in [2023]:
lwfr_divdends, frmtrm_divdends, thstrm_divdends = find_divdends(stock_name, year) # 배당금 가져오기
if year != 2020:
record += [lwfr_divdends, frmtrm_divdends, thstrm_divdends]
else:
record += [frmtrm_divdends, thstrm_divdends] # 2018년이 중복되므로
print(record)
div_data.append(record)
time.sleep(0.5) # 0.5초씩 재움
모든 배당금 정보를 db에 저장
div_data = pd.DataFrame(div_data, columns = ["stock_name", "2021", "2022", "2023"])
engine = create_engine('mysql+pymysql://~~~~')
div_data.to_sql('주당배당금', engine, if_exists='replace')
engine.dispose()
'재테크•투자•경제•주식' 카테고리의 다른 글
20231227-파라텍(033540) (0) | 2023.12.27 |
---|---|
20231227-포스코엠텍(009520) (0) | 2023.12.27 |
그렇다면, 배당률이 가장 높은 국내주식은 뭐야? (0) | 2023.09.15 |
주식 배당금이란? (0) | 2023.09.15 |
퀀트에서 배당금 정보 이해 (0) | 2023.09.15 |