본문 바로가기

API

[전자공시 Dart API] 공시정보 공시검색에서 무상증자 회사 리스트확인

반응형

전자공시 Dart API의 개발가이드 > 공시정보 > 공시검색 데이터를 가져와 보겠습니다.

본인의  인증키(API Key)가 필요하니 필요하신분은 아래를 참고 부탁드립니다.

 

1. 가입 및 인증키 확인(Skip 가능)

2. 공시검색 데이터 가져오기

 

1. 가입 및 인증키 확인(Skip 가능)

https://yenpa.tistory.com/23

 

[전자공시 Dart API] 가입 및 인증키(API Key) 확인하기

1. 사이트 가입 2. 인증키(API Key) 확인하기 1. 사이트 가입 사이트에 접속합니다. https://opendart.fss.or.kr/ 전자공시 OPENDART 시스템 --> 시스템 점검으로 모든 서비스 이용이 일시적으로 중단되어니 양

yenpa.tistory.com

 

2. 공시검색 데이터 가져오기

요청 URL은 json형식을 사용하겠습니다.

필수 요청 인자(Parameter)는 crtfc_key (본인의 API Key)하나입니다.

필수 요청인자로 공시검색 데이터를 가져와 보겠습니다.

import requests
import pandas as pd
from IPython.display import display

# 공시정보 필수 Parameter로 가져오기
crtfc_key='YOUR_APIKEY'

url = 'https://opendart.fss.or.kr/api/list.json'
params = {
    'crtfc_key': crtfc_key
}
results = requests.get(url, params=params).json()
results

 

총(total_count) 433개 중 페이지 당(page_count) 10개씩, 총페이지(total_page) 44페이지 이네요.

433개 전체 데이터를 가져오는 코드입니다.

import requests
import pandas as pd
from IPython.display import display

crtfc_key='YOUR_APIKEY'

page_no=1
page_count=100

results_all=pd.DataFrame() #전체결과 DataFrame
while(True):
    url = 'https://opendart.fss.or.kr/api/list.json'
    params = {
        'crtfc_key': crtfc_key,
        'page_no' : str(page_no),
        'page_count' : str(page_count),
    }
    
    #결과를 json형태로 저장
    results = requests.get(url, params=params).json()
    #결과중 실제 공시정보가 있는부분만 DataFrame으로 저장
    results_df = pd.DataFrame(results['list'])
    #하나의 DataFrame으로 만듬
    results_all = pd.concat([results_all,results_df])
    
    total_page=results['total_page']
    
    # total_page와 page_no이 같으면 while문 종료
    #if page_no==total_page:
    if page_no==total_page:
        print(page_no,',',total_page)
        break
    
    page_no=page_no+1
    
    
results_all.shape

results_all.shape이 (433,9)로 나오는데 위에서 확인한 total_count 433과 일치합니다.

 

Parameter부분을 보시면 page_count를 100으로 설정해서 100개씩 결과를 가져오고, 

page_no으로 1, 2, 3 ....페이지 확인이 가능하도록 했습니다.

page_no=1
page_count=100

results_all=pd.DataFrame()
while(True):
    url = 'https://opendart.fss.or.kr/api/list.json'
    params = {
        'crtfc_key': crtfc_key,
        'page_no' : str(page_no),
        'page_count' : str(page_count),
    }

결과를 json, 파이썬의 dictionary 형태로 변환하고 공시정보가 있는부분만

따로 DataFrame으로 저장했습니다.

#결과를 json형태로 저장
results = requests.get(url, params=params).json()
#결과중 실제 공시정보가 있는부분만 DataFrame으로 저장
results_df = pd.DataFrame(results['list'])
#하나의 DataFrame으로 만듬
results_all = pd.concat([results_all,results_df])

while문이 page_no 1~total_page 만큼만 순환하도록 if문을 추가했습니다.

total_page=results['total_page']
    
# total_page와 page_no이 같으면 while문 종료
if page_no==total_page:
    print(page_no,',',total_page)
    break

page_no=page_no+1

 

몇개의 결과와 날짜 정보를 확인해보겠습니다.

display(results_all.head())
print(results_all['rcept_dt'].unique())

날짜가 오늘만 있는 것이 아쉽네요

요청 Parameter에 시작날짜, 종료날짜가 있으니 저것을 이용해 1개월치의 데이터를 모아보겠습니다.

 

 

반응형

 

 

 

날짜 입력을 추가한 전체코드입니다.

1개월 치 데이터 수집은 시간이 살짝 걸리네요. 총 11675개 수집했습니다.

import requests
import pandas as pd
from IPython.display import display

crtfc_key='YOUR_APIKEY'

page_no=1
page_count=100
bgn_de='20220919'
end_de='20221018'

results_all=pd.DataFrame()
while(True):
    url = 'https://opendart.fss.or.kr/api/list.json'
    params = {
        'crtfc_key': crtfc_key,
        'page_no' : str(page_no),
        'page_count' : str(page_count),
        'bgn_de' : bgn_de,
        'end_de' : end_de,
    }
    
    #결과를 json형태로 저장
    results = requests.get(url, params=params).json()
    #결과중 실제 공시정보가 있는부분만 DataFrame으로 저장
    results_df = pd.DataFrame(results['list'])
    #하나의 DataFrame으로 만듬
    results_all = pd.concat([results_all,results_df])
    
    total_page=results['total_page']
    
    # total_page와 page_no이 같으면 while문 종료
    if page_no==total_page:
        break
    
    page_no=page_no+1
    
    
results_all.shape

 

공시 정보중 무상증자가 들어가 레포트만 검색하겠습니다.

keyword='무상증자'
results_all.loc[results_all['report_nm'].str.contains(keyword)]

1개월 내의 공시중 아래의 결과가 확인됩니다.

 

홈페이지에 있는 결과 parameter의 정보 남겨드립니다.

corp_cls 법인구분 법인구분 : Y(유가), K(코스닥), N(코넥스), E(기타)
corp_name 종목명(법인명) 공시대상회사의 종목명(상장사) 또는 법인명(기타법인)
corp_code 고유번호 공시대상회사의 고유번호(8자리)
stock_code 종목코드 상장회사의 종목코드(6자리)
report_nm 보고서명 공시구분+보고서명+기타정보
[기재정정] : 본 보고서명으로 이미 제출된 보고서의 기재내용이 변경되어 제출된 것임
[첨부정정] : 본 보고서명으로 이미 제출된 보고서의 첨부내용이 변경되어 제출된 것임
[첨부추가] : 본 보고서명으로 이미 제출된 보고서의 첨부서류가 추가되어 제출된 것임
[변경등록] : 본 보고서명으로 이미 제출된 보고서의 유동화계획이 변경되어 제출된 것임
[연장결정] : 본 보고서명으로 이미 제출된 보고서의 신탁계약이 연장되어 제출된 것임
[발행조건확정] : 본 보고서명으로 이미 제출된 보고서의 유가증권 발행조건이 확정되어 제출된 것임
[정정명령부과] : 본 보고서에 대하여 금융감독원이 정정명령을 부과한 것임
[정정제출요구] : 본 보고서에 대하여 금융감독원이 정정제출요구을 부과한 것임
rcept_no 접수번호 접수번호(14자리)

※ 공시뷰어 연결에 이용예시
- PC용 : https://dart.fss.or.kr/dsaf001/main.do?rcpNo=접수번호
flr_nm 공시 제출인명 공시 제출인명
rcept_dt 접수일자 공시 접수일자(YYYYMMDD)
rm 비고 조합된 문자로 각각은 아래와 같은 의미가 있음
유 : 본 공시사항은 한국거래소 유가증권시장본부 소관임
코 : 본 공시사항은 한국거래소 코스닥시장본부 소관임
채 : 본 문서는 한국거래소 채권상장법인 공시사항임
넥 : 본 문서는 한국거래소 코넥스시장 소관임
공 : 본 공시사항은 공정거래위원회 소관임
연 : 본 보고서는 연결부분을 포함한 것임
정 : 본 보고서 제출 후 정정신고가 있으니 관련 보고서를 참조하시기 바람
철 : 본 보고서는 철회(간주)되었으니 관련 철회신고서(철회간주안내)를 참고하시기 바람

 

이상으로 전자공시 Dart API를 이용해서 공시검색 데이터를 가져와 봤습니다.

반응형