본문 바로가기

API

[전자공시 Dart API] 전체 상장 회사의 재무제표(단일회사 전체 재무제표) 수집

반응형

전자공시 Dart API를 이용해서 전체 상장회사에 대해 재무제표 정보를 가져오는 방법을 알아보겠습니다.

전체 상장회사 리스트는 이 글의 마지막 부분에 첨부해 드리며 이전 포스팅을 참고하셔서 직접 만드셔도 됩니다.

 

전체 상장회사 리스트로 각 회사의 상장기업 재무정보 > 단일회사 전체 재무제표 API에서 정보를 수집한 후

하나의 DataFrame에 저장하도록 하겠습니다.

 

3번부터 진행하시면 되고, 필요에 따라 1, 2번 참고하시면 될 것 같습니다.

 

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

2. 전체 회사리스트 수집(Skip 가능)

3. 회사별 전체 재무제표 수집

 

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. 전체 회사리스트 수집(Skip 가능)

https://yenpa.tistory.com/49

 

[전자공시 Dart API] 전체 상장 회사의 상세정보(기업개황) 수집 및 저장

전자공시 Dart API를 이용해서 상장회사의 리스트를 가져와서 저장해보도록 하겠습니다. 공시정보 > 고유번호에서 제공되는 데이터는 기본 정보(회사코드, 회사명, 주식코드)만 있어, 법인구분(코

yenpa.tistory.com

 

3. 회사별 전체 재무제표 수집

전체 코드를 남겨드립니다.

crtfc_key는 본인의 데이터가 필요합니다.

요청 parameter는 사업년도(bsns_year) 2021년, 보고서 종류(reprt_code) 사업보고서,

fs_div 연결 재무제표를 설정했습니다.

# 회사별 전체재무제표 확인
result_all = pd.DataFrame()

crtfc_key='YOUR_API_KEY'
bsns_year='2021'
reprt_code='11011' #1분기보고서: 11013 반기보고서: 11012 3분기보고서: 11014 사업보고서: 11011
fs_div='OFS'  #CFS:연결재무제표, OFS:재무제표

for i, r in corp_list.iterrows():
    #전체재무제표 요청인자
    crtfc_key=crtfc_key
    corp_code=str(r['corp_code']).zfill(8)
    
    #if i == 100:
    #    break
    
    print(i)
    
    url = 'https://opendart.fss.or.kr/api/fnlttSinglAcntAll.json'
    params = {
        'crtfc_key': crtfc_key,
        'corp_code' : corp_code,
        'bsns_year' : bsns_year,
        'reprt_code' : reprt_code,
        'fs_div' : fs_div,
    }
    
    #결과를 json형태로 저장
    results = requests.get(url, params=params).json()
    
    if results['status'] == '000':
        result_df = pd.DataFrame(results['list'])
        result_all = pd.concat([result_all,result_df])
    
result_all

 

전체 재무제표 정보를 저장할 DataFrame이 되겠습니다.

# 회사별 전체재무제표 확인
result_all = pd.DataFrame()

요청 인자입니다.

#crtfc_key='YOUR_API_KEY'
bsns_year='2021'
reprt_code='11011' #1분기보고서: 11013 반기보고서: 11012 3분기보고서: 11014 사업보고서: 11011
fs_div='OFS'  #CFS:연결재무제표, OFS:재무제표

2번에서 수집한 전체 회사별로 for문을 실행합니다.

for i, r in corp_list.iterrows():

corp_code가 8자리 입력이라, 0을 추가해서 8자리 맞추는 부분입니다.

corp_code=str(r['corp_code']).zfill(8)

API를 실행해서 결과를 json으로 변환해서 results에 저장합니다.

url = 'https://opendart.fss.or.kr/api/fnlttSinglAcntAll.json'
params = {
    'crtfc_key': crtfc_key,
    'corp_code' : corp_code,
    'bsns_year' : bsns_year,
    'reprt_code' : reprt_code,
    'fs_div' : fs_div,
}

#결과를 json형태로 저장
results = requests.get(url, params=params).json()

API 응답이 000 : 정상 일때만 데이터를 result_df로 저장하고, 전체 결과와 합칩니다.

if results['status'] == '000':
    result_df = pd.DataFrame(results['list'])
    result_all = pd.concat([result_all,result_df])

 

결과를 보시면 정상적으로 저장이 잘 된것을 알 수 있습니다.

전체 row가 31만 건이 되네요.

result_all.shape

 

이 중에서 삼성전자의 결과만 한 번 확인해보겠습니다.

삼성전자의 corp_code는 00126380입니다.

result_all.loc[result_all['corp_code']=='00126380']

 

 

다음 포스팅에서는 여기에서 수집한 결과를 활용해 보겠습니다.

이상으로 전체 상장회사에 대해 재무제표 정보를 가져오는 방법을 알아봤습니다.

 

회사상세정보.csv
0.88MB

반응형