ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (OpenAPI)DATA.GO.KR: OpenAPI로 데이터 추출 python
    금융퀀트/프로그램기초 2023. 3. 13. 06:35
    반응형

    기본 라이브러리 설치

    파이썬으로 OpenAPI를 이용을 구현하는 다양한 방법 중 "requests"와 "BeautifulSoup" 라이브러리 정도로 "금융위원회_지수시세정보" 데이터 추출을 간단하게 구현해 보자. "requests"는 이름 그대로 홈페이지 서버에 "GET", "POST" 같은 "요청"을 보낼 수 있는 라이브러리이다. "BeautifulSoup" 은 html, xml 문서 등 태그로 이루어진 문서를 편하게 다룰 수 있도록 하는 라이브러리이다. 라이브러리 설치는 cmd 창을 따로 실행하거나 아니면 Visual Studio 같은 에디터에서 아래와 같은 명령어를 실행하면 된다. 자세한 라이브러리 설치 관련 사항은 "(OpenAPI)DART Open API 사용법2: 기업데이터 추출 in python" 를 참조하면 된다.

    # requests 라이브러리 설치
    pip install requests
    # Beautifulsoup 라이브러리 설치
    pip install beautifulsoup4

     

    기업데이터 추출 : xml 데이터 접근

    그림1: XML 데이터 접근 예시

    "(OpenAPI)DATA.GO.KR(공공데이터포털): 데이터 추출 " 에서 확인한 것처럼 "개발계정 상세보기" 화면에서 내 API 키를 입력하고 "미리 보기"를 누르면 데이터에 접근할 수 있다. 중요한 점은 URL을 통해서 데이터에 접근할 수 있고, URL에 제공되는 문서가 각각의 데이터 정보를 태그로 감싸고 있다는 것이다.

    데이터 추출 in python

    URL을 잘 보면 아래와 같이 구성되어 있다. 

    "https://apis.data.go.kr/1160100/service/GetMarketIndexInfoService/getStockMarketIndex?serviceKey=" + "나의 API키"

    여기에 조건을 넣으면 "&조건명=값" 이런 식으로 추가 조건이 붙게 된다.

    그림2: 조회조건 추가 예시

    예를 들어 그림 2처럼 "20230309"라는 조건을 넣어서 아래와 같이 조회하는 URL은 아래와 같이 분석할 수 있다.

    "https://apis.data.go.kr/1160100/service/GetMarketIndexInfoService/getStockMarketIndex?serviceKey=" + "나의 API키" + "&basDt=20230309"

    xml 데이터 뽑기 

    URL에 나의 API 키를 넣어서 문서에 접근이 가능하기 때문에 requests 라이브러리를 통해서 문서정보를 받아오고 Beautifulsoup 라이브러리를 통해서 태그로 이루어진 문서를 조작하면 된다. "requests"와 "BeautifulSoup" 라이브러리로 간단하게 URL에 접속해서 기본 데이터를 받아오는 코드는 아래와 같다.

    from bs4 import BeautifulSoup
    import requests
    
    
    url = "https://apis.data.go.kr/1160100/service/GetMarketIndexInfoService/getStockMarketIndex?serviceKey="
    myapikey = "나의 API키"
    
    # URL 접근 OpenAPI로 정보 GET
    res = requests.get(url+myapikey)
    # 접근 에러 처리
    res.raise_for_status()
    
    # Beautifulsoup 으로 xml 문서 객체화
    soup = BeautifulSoup(res.text, "xml")
    # print
    print(soup)

    위 코드를 실행하면 에디터 결과창에 OpenAPI로 받아온 문서가 출력된다.

    그림3: 코드실행 결과

    출력된 데이터를 정리하면 아래와 같은데, 이는 "개발계정 상세 보기" 화면에서 내 API 키를 입력하고 "미리 보기"를 눌렀을 때 나오는 것과 같은 데이터임을 알 수 있다.

    <?xml version="1.0" encoding="utf-8"?>
    <response>
    <header>
    <resultCode>00</resultCode>
    <resultMsg>NORMAL SERVICE.</resultMsg>
    </header>
    <body>
    <numOfRows>10</numOfRows>
    <pageNo>1</pageNo>
    <totalCount>119350</totalCount>
    <items>
    <item>
    <basDt>20230309</basDt>
    <idxNm>IT H/W</idxNm>
    <idxCsf>KOSDAQ시리즈</idxCsf>
    <epyItmsCnt>313</epyItmsCnt>
    <clpr>558</clpr>
    <vs>-7.4</vs>
    <fltRt>-1.31</fltRt>
    <mkp>568.7</mkp>
    <hipr>569.07</hipr>
    <lopr>553.6</lopr>
    <trqu>298028917</trqu>
    <trPrc>2579878239295</trPrc>
    <lstgMrktTotAmt>73111541150362</lstgMrktTotAmt>
    <lsYrEdVsFltRg>76</lsYrEdVsFltRg>
    <lsYrEdVsFltRt>15.75</lsYrEdVsFltRt>
    <yrWRcrdHgst>578.89</yrWRcrdHgst>
    <yrWRcrdHgstDt>20230306</yrWRcrdHgstDt>
    <yrWRcrdLwst>477.05</yrWRcrdLwst>
    <yrWRcrdLwstDt>20230102</yrWRcrdLwstDt>
    <basPntm>19960701</basPntm>
    <basIdx>1000</basIdx>
    </item>
    ...
    </items>
    </body>
    </response>

     

    반응형
Designed by Tistory.