본문 바로가기
AI&개발&데이터분석/기타개발

[한국거래소 Data Marketplace OPEN API] 코스피, 코스닥 지수정보 수집하기 (python code)

by 일등박사 2026. 1. 6.

 

2026.01.05 - [AI&개발&데이터분석/기타개발] - 한국거래소 Data Marketplace OPEN API 사용해보기! - 권한신청하기!

 

한국거래소 Data Marketplace OPEN API 사용해보기! - 권한신청하기!

오늘은한국거래소 Data Marketplace의 OPEN API 키를 신청하고 사용해보겟습니다~! 계정이 필요하기에 먼저 간단히 회원가입을 해줍니다 (네이버 카카오를 통한 소셜 가입이 가능해요!)https://openapi.krx.c

drfirst.tistory.com

 

API 건별로의 권한신청까지 완료되었다면,

이제는 데이터를 불러와볼수 있습니다!!

 

이번 포스팅에서는 KRX의 지수정보를 불러와보겠습니다!!

 

우선 기본 package과 API KEY를 불러옵니다!

import requests
import pandas as pd

API_KEY = "{나의키 입력하기}"

 

이제! 코스피 지수에 대한 정보를 알아볼까요!?

 

# 명세서에 제공된 신규 엔드포인트 URL
url = "https://data-dbg.krx.co.kr/svc/apis/idx/kospi_dd_trd"

# 2. 요청 파라미터 (명세서 1.3.1 InBlock_1 참조)
params = {
    "basDd": "20260102"  # 예: "20240520"
}

# 3. HTTP 헤더 설정
headers = {
    "AUTH_KEY": API_KEY,
}


# 4. GET 요청
response = requests.get(url, params=params, headers=headers)
print(response.status_code)
if response.status_code == 200:
    res_data = response.json()

    # 5. 응답 데이터 추출 (명세서 1.6 response Sample 참조)
    # OutBlock_1 키 안에 데이터 리스트가 담겨 있음
    out_block = res_data.get("OutBlock_1", [])

    # 데이터프레임으로 변환하여 가독성 높이기
    df = pd.DataFrame(out_block)

df

 

로하면

아래이미지와 같이 해당일자의 코스피 관련 모든 지수를 볼 수 있습니다

 

 

이번엔 target URL 만 url = "https://data-dbg.krx.co.kr/svc/apis/idx/kosdaq_dd_trd" 로 바꾸어서

# 명세서에 제공된 신규 엔드포인트 URL
url = "https://data-dbg.krx.co.kr/svc/apis/idx/kosdaq_dd_trd"

# 2. 요청 파라미터 (명세서 1.3.1 InBlock_1 참조)
params = {
    "basDd": "20260102"  # 예: "20240520"
}

# 3. HTTP 헤더 설정
headers = {
    "AUTH_KEY": API_KEY,
}


# 4. GET 요청
response = requests.get(url, params=params, headers=headers)
print(response.status_code)
if response.status_code == 200:
    res_data = response.json()

    # 5. 응답 데이터 추출 (명세서 1.6 response Sample 참조)
    # OutBlock_1 키 안에 데이터 리스트가 담겨 있음
    out_block = res_data.get("OutBlock_1", [])

    # 데이터프레임으로 변환하여 가독성 높이기
    df = pd.DataFrame(out_block)

df

 

 

해보면!!

 

 

이렇게 다양한 코스닥 지수들을 볼 수 있지요~~

 

그럼!!

 

마지막으로 2025년 12개월의 월초 지수를 loop으로 수집해보면!!

import requests
import pandas as pd
from datetime import datetime, timedelta

# 1. API 설정
URL = "https://data-dbg.krx.co.kr/svc/apis/idx/kospi_dd_trd"
API_KEY = "{나의키}"
headers = {"AUTH_KEY": API_KEY}

def get_first_working_day_data(year, month):
    """특정 년/월의 첫 번째 영업일 데이터를 찾아 반환"""
    # 해당 월의 1일부터 시작
    current_date = datetime(year, month, 1)
    
    # 최대 10일까지만 시도 (공휴일이 길 경우 대비)
    for day_candidate in range(1,10):
        date_str =  datetime(year, month, day_candidate).strftime("%Y%m%d")
        params = {"basDd": date_str}
        
        response = requests.get(URL, params=params, headers=headers)
        if response.status_code == 200:
            res_data = response.json()
            out_block = res_data.get("OutBlock_1", [])

            # 데이터가 존재하면(영업일이면) 리스트 반환
            # 데이터가 존재하면(영업일이면) 리스트 반환
            if len(out_block)>0:
                return out_block
                print(f"[{month}월 성공] {date_str} 데이터를 가져왔습니다.")
            else:
                print(f"{month}월 {day_candidate}일에 정보없음")

            
        # 데이터가 없으면 다음날로 이동
        current_date += timedelta(days=1)
    
    return None

# 2. 1월부터 12월까지 루프 실행
monthly_data_list = []

print("2025년 월별 첫 영업일 데이터 수집 시작...")

for month in range(1, 13):
    data = get_first_working_day_data(2025, month)
    if data:
        # 데이터가 리스트 형태이므로 확장(extend)
        monthly_data_list.extend(data)

# 3. 데이터프레임 생성 및 결과 확인
df_final = pd.DataFrame(monthly_data_list)

df_final = df_final.sort_values(by='BAS_DD')

print("\n--- 수집 완료 (12개월치) ---")
df_final

 

이렇게 예쁜 표 나오고~~

 

 

이런식으로 차트도 만들수 있습니다~~

 

댓글