ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (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>

     

    반응형
Designed by Tistory.