전자공시 Dart API의 개발가이드 > 공시정보 > 공시검색 데이터를 가져와 보겠습니다.
본인의 인증키(API Key)가 필요하니 필요하신분은 아래를 참고 부탁드립니다.
1. 가입 및 인증키 확인(Skip 가능)
2. 공시검색 데이터 가져오기
1. 가입 및 인증키 확인(Skip 가능)
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를 이용해서 공시검색 데이터를 가져와 봤습니다.
'API' 카테고리의 다른 글
[전자공시 Dart API] 임원 주요주주 소유보고 회사리스트 수집 (4) | 2022.10.19 |
---|---|
[전자공시 Dart API] 5% 대량보유 상황보고 회사리스트 수집 (4) | 2022.10.19 |
[전자공시 Dart API] 가입 및 인증키(API Key) 확인하기 (4) | 2022.10.18 |
[SK Open API] 여행지의 추정 여행자수 및 체류시간 구하기 (4) | 2022.10.17 |
[네이버 API] 블로그 나만의 키워드 마스터 만들기(파이썬) (7) | 2022.10.15 |