금융퀀트/프로그램기초

(OpenAPI)DART Open API 사용법2: 기업데이터 추출 in python

문송한투자자 2021. 2. 11. 13:08
반응형

1. 기본 라이브러리 설치

  OpenAPI는 다양한 언어로 활용할 수 있을 텐데, 이하에서는 파이썬을 이용해 보도록 하겠다. 아나콘다 파이썬 환경에서 파이썬을 이용해서 DART Open API를 이용하려면, "requests" 라이브러리와 "BeautifulSoup" 라이브러리 정도가 필요하다. 이 설치를 위해서 anaconda cmd를 실행시키고, 아래 명령어를 통해서 라이브러리를 설치하면 된다. 

pip install requests
pip install beautifulsoup4 

참고로 anaconda cmd 에 어떤 라이브러리가 있는지 확인하려면, 아래와 같이 리스트를 검색하면 리스트가 쭉 나온다. 

conda list

아래는 내가 설정해 놓은 python 가상 환경 "py37_64"에 requests 라이브러리를 설치하는 화면이다. ( 참고만 하자 )

2. 기업데이터 추출: xml 데이터 뽑기

그림1: 기업개황 보기

  "기업개황"에 접근하기 위해 위에 표시된 경로로 들어가면 아래와 같은 알 수 없는 화면이 나온다. ( 이런 식으로 해놓으면 우리 같은 문송한 투자자들은 뭘 어떻게 이용하라는 건지... ) 

그림2:url 정보 확인( xml 포멧으로만 작업한다고 생각하면 된다)

하지만 어려울 것이 없다. 그냥 url 찍어서 인터넷으로 접속한다고 생각하면 된다. 

그림3: url 조합 예시

그림3에 노란색 표시한 부분처럼 그림 2의 url에 발급받은 API KEY ( (OpenAPI) DART Open API 사용법 1: 인증키 발급 참조) 등을 조합해서 접속할 인터넷 주소를 만든다고 생각하면 된다. 즉, 아래와 같은 주소로 인터넷으로 접속한다고 생각하면 된다. 

그림 2에 나온 주소+"crtfc_key="+발급받는 API 키 +"&corp_code="+종목코드 

실제로 위와 같이 만든 주소를 인터넷에 주소에 치면 xml 형식의 데이터가 나온다. 

3. 데이터 추출 in python

  URL을 만들어서 XML 형식의 문서에 접근하는 것을 파이썬으로 구현해 보자. 어렵게 생각할 것 없이 ①URL을 조합하고 ②XML 파일의 텍스트들을 beautifulsoup 라이브러리를 이용해서 읽어오는 과정을 거치면 끝이다. 

#라이브러리 읽어오는 부분----------------------------------------------------------
import requests
from bs4 import BeautifulSoup


#URL을 조합하는 부분---------------------------------------------------------------
url = "https://opendart.fss.or.kr/api/company.xml?"
crtfc_key = "나의 API 키값 넣기"
corp_code = "00126380"
apitest = url+"crtfc_key="+crtfc_key+"&corp_code="+corp_code


#XML파일 텍스트 읽어오기------------------------------------------------------------
res = requests.get(apitest)
soup = BeautifulSoup(res.text, "lxml")
print(soup)

위에서 crtfc_key 의 값을 우리가 각자 받은 API 키 값으로 하고, corp_code를 원하는 주식의 KRX주식 코드(네이버 주식, 구글에서 검색 가능) 다양한 값들을 조회할 수 있다. 위 예시에서는 corp_code가 삼성전자의 코드이기 때문에 아래와 같은 결과가 나온다. 

<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/>
<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>

 

반응형