전자공시 Dart API를 이용해서 전체 상장회사에 대해 재무제표 정보를 가져오는 방법을 알아보겠습니다.
전체 상장회사 리스트는 이 글의 마지막 부분에 첨부해 드리며 이전 포스팅을 참고하셔서 직접 만드셔도 됩니다.
전체 상장회사 리스트로 각 회사의 상장기업 재무정보 > 단일회사 전체 재무제표 API에서 정보를 수집한 후
하나의 DataFrame에 저장하도록 하겠습니다.
3번부터 진행하시면 되고, 필요에 따라 1, 2번 참고하시면 될 것 같습니다.
1. 가입 및 인증키 확인(Skip 가능)
2. 전체 회사리스트 수집(Skip 가능)
3. 회사별 전체 재무제표 수집
1. 가입 및 인증키 확인(Skip 가능)
2. 전체 회사리스트 수집(Skip 가능)
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']
다음 포스팅에서는 여기에서 수집한 결과를 활용해 보겠습니다.
이상으로 전체 상장회사에 대해 재무제표 정보를 가져오는 방법을 알아봤습니다.
'API' 카테고리의 다른 글
[FinanceDataReader] 검색년도 CAGR(연평균 성장률) 상위 회사확인 (4) | 2022.11.10 |
---|---|
[FinanceDataReader] 주가 및 CAGR(연평균 성장률) 확인 (4) | 2022.11.09 |
[전자공시 Dart API] 전체 상장 회사의 상세정보(기업개황) 수집 및 저장 (19) | 2022.11.07 |
[전자공시 Dart API] 유통주식 비율이 낮은 (자기주식 비율이 높은) 회사 리스트 (4) | 2022.11.06 |
[네이버 API] 블로그 나만의 키워드 마스터 만들기 두번째(파이썬) (5) | 2022.11.04 |