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
- 위의 그림처럼 주식 - 종목시세 - 전종목 시세를 통해 들어가서 오른쪽 상단의 download 기능을 이용하여 excel 파일을 다운로드 합니다.
본 예제에서는 다운 받은 파일의 이름을 data.xlsx로 수정하여 사용하겠습니다.
2. fnguide.com으로 이동하여 기업 정보를 확인합니다.
https://comp.fnguide.com/SVO2/asp/SVD_Main.asp?gicode=A000990
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를 이용하여 종목번호를 불러오는 법과 웹주소상의 이미지를 가져오고, 에러처리를 통해 모두 가져오는 방법을 정리해보았습니다.
실무에 사용가능한 코딩을 하는 그날까지~
열심히 공부해보겠습니다~~
직접 만든거라 부족하겠지만 하트"♡"라도 한번 꾹~ 눌러주시면 큰 힘이 될것 같습니다.!
'Engineering > Python' 카테고리의 다른 글
[python] 텔레그램봇을 채널에 넣어 알림 보내기(w/ indexbriefing) (2) | 2023.01.27 |
---|---|
[python] API layer.com을 이용한 다양한 api 연결 (0) | 2023.01.07 |
[python] google sheet 정보를 정해진 시간에 telegram으로 보내기 (0) | 2022.12.25 |
[python] schedule error "module 'schedule' has no attribute 'every' (0) | 2022.12.11 |
[python] schedule 함수 사용하여 지정시간에 실행하기 (0) | 2022.12.11 |
댓글