자신의 DB에 주식 마스터 테이블을 만들고, 파이썬에서 pykrx 모듈을 사용해 주식 마스터 정보를 가져오는 과정입니다.

 

pykrx는 github에서 공개하고 있으며, 한국의 주식 정보를 쉽게 가져다 쓸수 있도록 만들어진 모듈입니다.

아래 페이지를 통해 관련 정보 및, 사용 방법을 확인해주세요.

  - https://github.com/sharebook-kr/pykrx

 

GitHub - sharebook-kr/pykrx: KRX 주식 정보 스크래핑

KRX 주식 정보 스크래핑. Contribute to sharebook-kr/pykrx development by creating an account on GitHub.

github.com

 

개인적으로 pykrx를 만들어 배포해주신 분들께 매우 감사한 마음입니다. 많은 귀찮은 과정을 손쉽게 해결해주셨으니까요, 좋은일 가득하시길!!

 

아래 소스는 pykrx를 사용해, 종목코드와 종목명, 마켓명(코스피, 코스닥)을 리스트 형태로 가져와 조회하는 내용입니다.

앞으로의 확장성을 고려해 클래스 형태로 모듈을 만들었습니다.

# pip install pymysql
# pip install matplotlib
# pip install pykrx

from pykrx import stock


class MyCollectKRX:
    @staticmethod
    def get_stock_master(_market):
        stk_master = []
        for stk_cd in stock.get_market_ticker_list(market=_market):
            stk_nm = stock.get_market_ticker_name(stk_cd)
            stk_master.append((stk_cd, stk_nm, _market))
        return stk_master


if __name__ == '__main__':
    myCollectKRX = MyCollectKRX()
    stk_master_all = myCollectKRX.get_stock_master('KOSPI')
    stk_master_all.extend(myCollectKRX.get_stock_master('KOSDAQ')) # 리스트 두 개를 합치기 위해서는 extend 사용

    for stk in stk_master_all:
        print(stk)

 

 

위 모듈을 실행하면, 종목코드, 종목명, 마켓명을 리스트 형태로 출력할 수 있습니다. 이후, 이 데이터를 DB화해서 저장까지 해볼 수 있겠죠.

여기서, 눈여겨 볼만한거 하나는 리스트 형태의  데이터를 합치기 위해서는 extend를 사용한다는 점입니다.

append는 리스트 내에 하나의 요소를 더하는 작업이고, 리스트 두 개를 단순히 합치기 위해서는 extend를 사용해야 합니다.

 

위 내용을 DB로 저장하기 위해서 테이블을 생성할 차례입니다. 여기서는 MySQL을 사용합니다. 아래와 같이 MYTRDDB 데이터베이스를 생성하고, 해당 데이터베이스에 테이블까지 생성합니다.

# SQL 툴을 이용해 MySQL에 접속해서 실행
CREATE DATABASE MYTRDDB; # DB 생성

CREATE TABLE MYTRDDB.KRX_STOCK(
	STK_CD VARCHAR(40) NOT NULL
 	,STK_NM VARCHAR(200) NOT NULL
 	,MKT_NM VARCHAR(40) NOT NULL
	,PRIMARY KEY(STK_CD)
);

 

위 테이블에 Insert하는 과정까지 추가해서 파이썬 소스를 변경해보면, 아래와 같습니다.

# pip install pymysql
# pip install matplotlib
# pip install pykrx

from pykrx import stock
import pymysql  # MYSQL 연결및, SQL 실행을 위해 추가


class MyCollectKRX:
    @staticmethod
    def get_stock_master(_market):
        stk_master = []
        for stk_cd in stock.get_market_ticker_list(market=_market):
            stk_nm = stock.get_market_ticker_name(stk_cd)
            stk_master.append((stk_cd, stk_nm, _market))
        return stk_master


if __name__ == '__main__':
    myCollectKRX = MyCollectKRX()
    stk_master_all = myCollectKRX.get_stock_master('KOSPI')
    stk_master_all.extend(myCollectKRX.get_stock_master('KOSDAQ'))  # 리스트 두 개를 합치기 위해서는 extend 사용

    # MySQL 연결 객체 생성
    myConn = pymysql.connect(user='???', password='???', host='localhost', port=3306,
                             charset='utf8', database='MYTRDDB')
    myCursor = myConn.cursor()
    for stk in stk_master_all:
        sql_ins = "INSERT INTO MYTRDDB.KRX_STOCK(STK_CD ,STK_NM ,MKT_NM) VALUES(%s, %s, %s)"  # INSERT SQL 작성
        myCursor.execute(sql_ins, (stk[0], stk[1], stk[2]))  # 튜플 형태로 파라미터 전달해서, SQL 실행

    # COMMIT 처리 및, MySQL 개체 CLOSE
    myConn.commit()
    myCursor.close()
    myConn.close()

    print('작업 완료')

 

위 파이썬 소스를 실행한 후에, MySQL에 접속해, 아래와 같이 SQL을 실행해보면, 주식 마스터 정보가 자신의 DB에 만들어진 것을 확인할 수 있습니다.

SELECT  T1.*
FROM    MYTRDDB.KRX_STOCK T1
ORDER BY T1.STK_CD LIMIT 5;

STK_CD   STK_NM            MKT_NM   
-------- ----------------- -------- 
000020   동화약품          KOSPI    
000040   KR모터스          KOSPI    
000050   경방              KOSPI    
000060   메리츠화재        KOSPI    
000070   삼양홀딩스        KOSPI

 

오늘은 여기까지입니다.

+ Recent posts