오프소스 리뷰 : 슬기로운 오픈소스 사용법 리뷰해드립니다!
#7 DART 전자공시시스템(1) - API 이용하기
안녕하세요. 디노랩스입니다!
오늘도 정말 유용한 정보를 가져왔는데요, 기업들에 관한 정보들을 손쉽게 이용할 수 있는 DART 전자공시시스템에 대해서 소개해드리려고합니다 :D
전자공시시스템(DART ; Data Analysis, Retrieval and Transfer System)은 상장법인 등이 공시서류를 인터넷으로 제출하고, 투자자 등 이용자는 제출 즉시 인터넷을 통해 조회할 수 있도록 하는 종합적 기업공시 시스템인데요.
DART를 활용하여 투자자 누구나 기업에 관한 정보를 손쉽게 얻을 수 있습니다.
그래서! 이번에는 DART에서 제공하는 API를 활용하여 간단한 시각화 및 문서화를 하는 방법을 알아보도록 하겠습니다.
01. DART API 인증키 신청하기
DART API 를 사용하기 위해서는 우선 API 인증키를 신청해야겠죠?ㅎㅎ
아래 링크로 접속하여 인증키 신청 버튼을 클릭한 뒤 신청을 완료해줍니다.
신청 후 이메일 인증을 완료하면 상단 인증키 신청/관리 탭의 오픈 API 이용현황에서 DART API 사용을 위한 Key를 확인할 수 있습니다.
전자공시 OPENDART 시스템
--> 시스템 점검으로 모든 서비스 이용이 일시적으로 중단되어니 양해 부탁드립니다. 시스템 점검 일정 2019년12월30일 23:00 ~ 12월31일 24:00 (1시간) *상기 작업 시간은 사정에 의해 변경 될 수 있습니
opendart.fss.or.kr
02. 직접 API를 호출하여 가져오기
dart_fss, OpenDartReader와 같이 DART API를 활용하여 손쉽게 데이터를 수집할 수 있는 라이브러리도 있지만 우선 라이브러리를 활용하지 않고 직접 데이터를 가져오는 방법을 알아보겠습니다.
우선 공시정보 중 기업개황 데이터를 가져와보겠습니다.
https://opendart.fss.or.kr/guide/detail.do?apiGrpCd=DS001&apiId=2019002
전자공시 OPENDART 시스템 | 개발가이드 | 상세
공시정보 개발가이드 공시정보 기업개황 기업개황 개발가이드 기본 정보 기본 정보 메서드 요청URL 인코딩 출력포멧 GET https://opendart.fss.or.kr/api/company.json UTF-8 JSON GET https://opendart.fss.or.kr/api/company
opendart.fss.or.kr
개발가이드의 기업개황 개발가이드 페이지를 확인해보면 아래와 같이 기본 정보와 요청 인자를 확인할 수 있습니다.
json, xml 형태 중 하나를 선택할 수 있으며 필수 요청인자로는 API 인증키와, 조회하려는 공시대상회사의 고유번호(8자리) 입니다.
개발가이드 페이지에서 아래로 스크롤하면 OpenAPI 테스트를 할 수 있는데 xml을 선택하여 검색버튼을 누르면 다음 그림과 같이 요청하는데 사용되는 url과 요청인자를 조합한 예시와 요청결과 xml 형식의 데이터 예시를 확인할 수 있습니다.
그러면 이제 위와 같은 방법으로 API를 직접 사용해봅시다!
# 필수 라이브러리를 불러옵니다.
import requests
from bs4 import BeautifulSoup
url = 'https://opendart.fss.or.kr/api/company.xml?'
crtfc_key = 'API key 값 넣기' # 발급받은 API key를 입력해주세요
corp_code = '00126380' # 공시대상회사 고유번호(8자리)
response = requests.get(f'{url}crtfc_key={crtfc_key}&corp_code={corp_code}')
soup = BeautifulSoup(response.text, 'lxml')
print(soup)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><html><body><result><status>000</status><message>정상</message><corp_code>00126380</corp_code><corp_name>삼성전자(주)</corp_name><corp_name_eng>SAMSUNG ELECTRONICS CO,.LTD</corp_name_eng><stock_name>삼성전자</stock_name><stock_code>005930</stock_code><ceo_nm>김기남, 김현석, 고동진</ceo_nm><corp_cls>Y</corp_cls><jurir_no>1301110006246</jurir_no><bizr_no>1248100998</bizr_no><adres>경기도 수원시 영통구 삼성로 129 (매탄동)</adres><hm_url>www.sec.co.kr</hm_url><ir_url></ir_url><phn_no>031-200-1114</phn_no><fax_no>031-200-7538</fax_no><induty_code>264</induty_code><est_dt>19690113</est_dt><acc_mt>12</acc_mt></result></body></html>
xml 형태로 조회하고자 하는 회사의 기업개황 데이터를 수집했습니다.
이제 xml 형태의 데이터를 조금 더 활용하기 쉽도록 데이터프레임 형태로 바꿔보겠습니다.
import pandas as pd
# 빈 데이터프레임 만들기
df_se = pd.DataFrame(columns=['기업명','영문기업명','종목코드','대표자명','법인구분',
'법인등록번호','사업자등록번호','주소','업종코드','설립일','결산월'])
# xml 데이터에서 필요한 값 추출
corp_name = soup.find('corp_name').text
corp_name_eng = soup.find('corp_name_eng').text
stock_code = soup.find('stock_code').text
ceo_nm = soup.find('ceo_nm').text
corp_cls = soup.find('corp_cls').text
jurir_no = soup.find('jurir_no').text
bizr_no = soup.find('bizr_no').text
adres = soup.find('adres').text
induty_code = soup.find('induty_code').text
est_dt = soup.find('est_dt').text
acc_mt = soup.find('acc_mt').text
# 데이터 프레임에 데이터 row 추가
df_se = df_se.append({
'기업명':corp_name,
'영문기업명':corp_name_eng,
'종목코드':stock_code,
'대표자명':ceo_nm,
'법인구분':corp_cls,
'법인등록번호':jurir_no,
'사업자등록번호':bizr_no,
'주소':adres,
'업종코드':induty_code,
'설립일':est_dt,
'결산월':acc_mt,
},
ignore_index = True
)
이번에는 반복문을 통해 여러 회사의 기업개황 데이터를 수집해보겠습니다.
url = 'https://opendart.fss.or.kr/api/company.xml?'
crtfc_key = 'API key 값 넣기' # 발급받은 API key를 입력해주세요
# 2021.10.11 기준 시가총액 상위 10개 회사의 기업개황 데이터를 불러옵니다.
corp_code_lst = ['00126380','00164779','00266961','00877059','00356361','00258801','00126362','00164742','00106641','00413046']
# 빈 데이터프레임 만들기
df_top10 = pd.DataFrame(columns=['기업명','영문기업명','종목코드','대표자명','법인구분',
'법인등록번호','사업자등록번호','주소','업종코드','설립일','결산월'])
# 반복문을 통해 각 회사별 데이터 수집 후 데이터프레임에 추가
for code in corp_code_lst:
response = requests.get(f'{url}crtfc_key={crtfc_key}&corp_code={code}')
soup = BeautifulSoup(response.text, 'lxml')
# xml 데이터에서 필요한 값 추출
corp_name = soup.find('corp_name').text
corp_name_eng = soup.find('corp_name_eng').text
stock_code = soup.find('stock_code').text
ceo_nm = soup.find('ceo_nm').text
corp_cls = soup.find('corp_cls').text
jurir_no = soup.find('jurir_no').text
bizr_no = soup.find('bizr_no').text
adres = soup.find('adres').text
induty_code = soup.find('induty_code').text
est_dt = soup.find('est_dt').text
acc_mt = soup.find('acc_mt').text
# 데이터 프레임에 데이터 row 추가
df_top10 = df_top10.append({
'기업명':corp_name,
'영문기업명':corp_name_eng,
'종목코드':stock_code,
'대표자명':ceo_nm,
'법인구분':corp_cls,
'법인등록번호':jurir_no,
'사업자등록번호':bizr_no,
'주소':adres,
'업종코드':induty_code,
'설립일':est_dt,
'결산월':acc_mt,
},
ignore_index = True
)
위와 같은 방법으로 기업개황 데이터뿐만 아니라 주요 재무정보, 공시보고서 정보 등 다양한 공시정보를 수집하여 활용할 수 있는데요.

다음포스팅에서 그 다양한 활용법들을 알려드릴테니까 보시고 유용한 정보 되셨으면 좋겠습니다 :D
'BLOG > 오픈소스 리뷰기' 카테고리의 다른 글
[오픈소스 리뷰기] 네이버 데이터랩(1) - 통합 검색어 트렌드 (1) | 2021.11.15 |
---|---|
[오픈소스 리뷰기] DART 전자공시시스템(2) - DART-FSS라이브러리 활용하기! (0) | 2021.11.12 |
[오픈소스 리뷰기] 번역 API 이용하기(2) - 네이버파파고, 카카오 번역 (0) | 2021.11.09 |
[오픈소스 리뷰기] 번역 API 이용하기(1) - Google 번역 (3) | 2021.11.08 |
[오픈소스 리뷰기] YouTube API 이용하기(2) - API 키 활용하기 (2) | 2021.11.04 |