파이썬을 이용하여 코스피,코스닥 전종목의 일별 종가를 긁어오자

##현재 시점 코스피,코스닥의 전종목 코드를 가져오자 현재 시점의 코스피와 코스닥의 전종목 코드를 가져오려면 http://marketdata.krx.co.kr/mdi#document=040602 에서 원하는 날짜의 데이터를 CSV로 다운받아 첫 두열을 복사하여 아래 사진과 같이 TXT파일에 저장하면 된다. 저장할때는 종목코드를 6자리로 맞춰 저장해야한다.

그 다음 위에서 저장한 종목코드들을 읽어와 아래 링크를 참조하여 ISIN코드로 바꾸어준다.

https://leesunkyu94.github.io/data%20%EB%A7%8C%EB%93%A4%EA%B8%B0/make-isin/

아래의 코드는 위의 링크를 함수화 한것이다.

def code_to_ISIN():
    data=open("code.txt","r")#저장한 텍스트 파일위치는 유동적으로 설정
    code_list=[]
    temp=data.readlines()
    for i in range(0,len(temp)):#종목명과 종목코드를 빼고싶으면 0말고 1부터 돌리면 된다.
        code_list.append(temp[i].split())
    
    for j in range(0,len(code_list)):
        result=0
        for i in range(0,len(code_list[j][0])):
            temp=int(code_list[j][0][i])*(1+(i%2))
            if temp>=10:
                result+=int(temp/10)
                result+=int(temp%10)
            else:
                result+=temp
        result+=20

        isin_code="KR7"+code_list[j][0]+"00"+str((10-result%10)%10)
        code_list[j][0]=isin_code
    return code_list
code_to_ISIN()

code_to_ISIN을 호출하면 종목코드가 ISIN으로 바뀌어서 return된다.

ISIN코드를 이용하여 데이터를 받아오자

일별 데이터를 받아오는 방법은 전 포스팅을 첨부하겠다.(https://leesunkyu94.github.io/data%20%EB%A7%8C%EB%93%A4%EA%B8%B0/make_data/) 전포스팅에서 만든 코드를 함수화 해서 보면 아래와 같다.

def get_daily_price(code):

    gen_otp_url = "http://marketdata.krx.co.kr/contents/COM/GenerateOTP.jspx"+"?url=MKD/04/0402/04020100/mkd04020100t3_02"
    gen_otp_data = {
        'name':'fileDown',
        'filetype':'csv',
        'isu_cd': code,
        'adj_stkprc': 'Y',
        'fromdate': '19800101',
        'todate': '20190823',
    }
    
    r = requests.get(gen_otp_url, params=gen_otp_data)
    
    code = r.text # 리턴받은 값을 아래 요청의 입력으로 사용.


    down_url = 'http://file.krx.co.kr/download.jspx'
    down_data = {
        'code': code,
    }

    r = requests.post(down_url, data=down_data, headers={
        'Referer': 'Referer: http://marketdata.krx.co.kr/mdi'
    })

    r.encoding = "utf-8-sig"
    df = pd.read_csv(BytesIO(r.content), header=0, thousands=',')

    return df
    

위의 두함수를 이용하여 종가만 모으는 코드는 아래와 같다.

code_list=code_to_ISIN()
data = get_daily_price(code_list[0][0])
data.rename(columns={'종가': code_list[0][1]}, inplace=True) #종가를 종목명으로 바꿔준다.

for j in range(1,len(code_list)): #앞에서 만든 data를 다른 종목코드를 이용해 받아온 종가와 합쳐준다.
    df2 = get_daily_price(code_list[j][0])
    df2.rename(columns={'종가': code_list[j][1]}, inplace=True)
    data=data.join(df2[[code_list[j][1]]])
    print(j)
data=data.drop(columns=['대비','거래량(주)',"거래대금(원)","시가","고가","저가","시가총액(백만)","상장주식수(주)"])
data.to_csv('코스피코스닥전종목.csv')

코스피코스닥전종목.csv에 저장이 완료 되었다.

댓글남기기