본문 바로가기
Engineering/Python

[python] 이미지 연달아 다운받기(ft. 차입공매도율)

by SPICA910 2022. 12. 28.
반응형

Index Engineer입니다. 

 

따라서 오늘의 파이썬 실습은 KOSPI 등록 업체들의 차입공매도율 그래프를 전부 다운 받아보고자 합니다. 

 

[목차]

1. KOSPI 상장 기업 종목번호 확인

2. fnguide.com의 차입공매도율 이미지 확인

3. python으로 이미지 다운 프로그램 작성 및 예외처리(Pandas, urllib)

 

[따라하기]

1. KOSPI 상장 기업들 종목번호를 확인하기 위해 krx의 data를 이용합니다. 

http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201050201 

 

KRX 정보데이터시스템

증권·파생상품의 시장정보(Marketdata), 공매도정보, 투자분석정보(SMILE) 등 한국거래소의 정보데이터를 통합하여 제공 서비스

data.krx.co.kr

- 위의 그림처럼 주식 - 종목시세 - 전종목 시세를 통해 들어가서 오른쪽 상단의 download 기능을 이용하여 excel 파일을 다운로드 합니다. 

  본 예제에서는 다운 받은 파일의 이름을 data.xlsx로 수정하여 사용하겠습니다. 

 

2. fnguide.com으로 이동하여 기업 정보를 확인합니다. 

https://comp.fnguide.com/SVO2/asp/SVD_Main.asp?gicode=A000990 

 

DB하이텍(A000990) | Snapshot | 기업정보 | Company Guide

FnGuide에서 제공하는 정보는 신뢰할 만한 자료 및 정보로부터 얻어진 것이나 그 정확성이나 완전성을 보장 할 수 없으며, 시간이 경과함에 따라 변경될 수 있습니다. 따라서 정보의 오류, 누락에

comp.fnguide.com

https://comp.fnguide.com/SVO2/asp/SVD_Main.asp?gicode=A000990 

위의 주소를 가만히 보면  "000990"은 DB하이텍의 종목번호입니다. 따라서 fnguide는 종목번호를 기반으로 탐색을 하고 있음을 알수 있습니다. 

화면 하단으로 가면 차입공매도 비중 그래프를 볼수 있는데 여기서 이미지 위에 마우스를 올려 놓고 [우클릭] - [새탭에서 이미지 열기]를 하면 이미지의 주소를 볼수 있습니다. 

이미지의 주소를 보면 아래와 같이 종목번호를 기준으로 앞과 뒤를 나누어 만들어 볼수 있습니다.

"http://cdn.fnguide.com/SVO2/chartImg/11_01/A"   +     "000990(종목번호)"     +   "_SELL_01.png"

3. 이제 파이썬으로 넘어갑니다. 

    1) pandas를 통해 종목정보를 다운로드한 파일에서 받아옵니다. 

import pandas as pd

def get_company_code():
    df_code = pd.read_excel("data.xlsx")
    df_code = df_code[['종목코드','종목명']]
    #print(df_code)
    return df_code['종목코드'].tolist()

    2) 받아온 종목코드를 기반으로 fnguide.com의 url을 만들어 다운로드를 합니다. 

      (여기서는 Full code로 올리겠습니다.)

 

#실행에 필요한 라이브러리를 불러옵니다. 
import pandas as pd
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
from urllib.parse import quote_plus
import urllib.request
import time
from urllib.error import URLError, HTTPError

#종목번호를 pandas를 이용하여 excel에서 불러옵니다.
def get_company_code():
    df_code = pd.read_excel("data.xlsx")
    df_code = df_code[['종목코드','종목명']]
    #print(df_code)
    return df_code['종목코드'].tolist()


def main():
    stock_code = get_company_code()        #stock_code안에 종목번호를 입력합니다. 
    #print(stock_code)
    i=0
    for i in range(2500):     #반복문을 통해 각 종목정보를 하나씩 불러옵니다. 
        baseUrl = 'https://cdn.fnguide.com/SVO2/chartImg/11_01/A'
        lasturl = '_SELL_01.png' 
        url = baseUrl + stock_code[i] + lasturl  # url로 이동하기위한 쿼리문자열 만들기
        print(url)

		#web page의 접근이 불가한 페이지는 다운로드를 안하도록 설정합니다.
        try:
            res = urllib.request.urlopen(url)
            print(res.status)
        except HTTPError as e:
            print(e)
        except URLError as e:
            print(e)
        else:
           urllib.request.urlretrieve(url, "./images/"+ stock_code[i] +".png")

        i = i + 1
        time.sleep(1)        #hosting server에서 block 당하지 않도록 시간 간격 1초를 만들어줍니다.



if __name__ == '__main__':
    main()

실행을 하면 아래와 같이 url이 정상인지 (정상이면 200) 확인하고 파일을 다운받고, 정상이지 않으면(Error 404)는 다음 종목으로 변경됩니다. 

 

 

pandas를 이용하여 종목번호를 불러오는 법과 웹주소상의 이미지를 가져오고, 에러처리를 통해 모두 가져오는 방법을 정리해보았습니다. 

 

실무에 사용가능한 코딩을 하는 그날까지~ 

열심히 공부해보겠습니다~~

 

직접 만든거라 부족하겠지만 하트"♡"라도 한번 꾹~ 눌러주시면 큰 힘이 될것 같습니다.!

 

반응형

댓글