출처 : https://minjejeon.github.io/learningstock/2017/09/07/download-krx-ticker-symbols-at-once.html
파이썬 코드 한줄로 종목코드 한번에 다운받기
야후 파이낸스 API를 이용하여 주가정보 수집하기에서는 종목코드(주식코드)를 하나씩 입력해야 주가정보를 다운로드 할 수 있습니다. 코스피나, 코스닥 전체의 정보를 받고 싶으면 시장에 속해 있는 기업들의 종목코드 리스트를 알아야겠죠?
http://financialfreedom.kr/834-2/에 종목코드를 한번에 받을 수 있는 쉬운 방법이 올라와 있어서 파이썬으로 리스트를 바로 받을 수 있게 만들어 봤어요. 파이썬을 안 쓰고 엑셀로 받으시려면 링크의 글을 참고하세요.
pandas 한줄로 종목코드 다운받기
pandas의 read_html 기능을 이용하여 인터넷에 있는 테이블을 한줄로 불러옵니다. pandas에서 파일을 읽어들이는 함수들은 인터넷 주소를 줘도 알아서 잘 받아와요.
import pandas as pd
df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0]
df.head()
인터넷 브라우저에서 엑셀 파일 다운로드 버튼을 누를 때에는 엑셀 파일이 다운로드 되는데, 다운로드 된 파일의 실제 내용은 html 테이블이기 때문에 read_excel 대신 read_html 함수로 불러옵니다.
Out:
회사명 종목코드 업종 \
0 BYC 1460 봉제의복 제조업
1 CJ CGV 79160 영화, 비디오물, 방송프로그램 제작 및 배급업
2 CJ씨푸드 11150 기타 식품 제조업
3 DSR제강 69730 1차 철강 제조업
4 KB금융 105560 기타 금융업
주요제품
0 메리야스,란제리 제조,도매/건축공사/부동산 임대,분양,공급......
1 영화상영,영화관 운영
2 수산물(어묵,맛살)가공품 도매,원양수산업,수출입
3 와이어로프,각종 경강선,철선제품,PC강선,아연도 강연선 제조......
상장일 결산월 대표자명 홈페이지
0 1975-06-02 12월 유 중 화 http://www.byc.co.kr
1 2004-12-24 12월 서 정 http://www.cgv.co.kr
2 1988-11-26 12월 유병철, 강신호(각자대표) http://www.cjseafood.net
3 2003-01-28 12월 홍하종 http://www.dsrcorp.com
4 2008-10-10 12월 윤종규 http://www.kbfg.com
지역
0 서울특별시
1 서울특별시
2 경기도
3 전라남도
4 서울특별시
종목코드 부분이 6자리 숫자로 나오지 않기 때문에 앞자리를 0으로 채워줍니다.
df.종목코드 = df.종목코드.map('{:06d}'.format)
df.종목코드.head()
Out:
0 001460
1 079160
2 011150
3 069730
4 105560
Name: 종목코드, dtype: object
위에 잘 보면… 시장구분이 빠져 있어요. 엑셀 양식에 시장구분이 빠져 있어서 그런데, 시장을 구분하려면 다운받을 URL의 파라미터를 조정하면 됩니다. 하지만 일일이 하려면 귀찮잖아요? 그래서 코드를 만들어 놨어요. 아래 코드를 실행시키세요. 위 내용의 종합판입니다.
import urllib.parse
import pandas as pd
MARKET_CODE_DICT = {
'kospi': 'stockMkt',
'kosdaq': 'kosdaqMkt',
'konex': 'konexMkt'
}
DOWNLOAD_URL = 'kind.krx.co.kr/corpgeneral/corpList.do'
def download_stock_codes(market=None, delisted=False):
params = {'method': 'download'}
if market.lower() in MARKET_CODE_DICT:
params['marketType'] = MARKET_CODE_DICT[market]
if not delisted:
params['searchType'] = 13
params_string = urllib.parse.urlencode(params)
request_url = urllib.parse.urlunsplit(['http', DOWNLOAD_URL, '', params_string, ''])
df = pd.read_html(request_url, header=0)[0]
df.종목코드 = df.종목코드.map('{:06d}'.format)
return df
이제 코스닥 시장의 종목코드를 한꺼번에 받아볼까요?
kosdaq_stocks = download_stock_codes('kosdaq')
kosdaq_stocks.head()
Out:
회사명 종목코드 업종 주요제품 \
0 CJ E&M 130960 텔레비전 방송업 방송게임영화음악
1 CJ프레시웨이 051500 음·식료품 및 담배 도매업 식자재유통, 단체급식
2 GMR 머티리얼즈 032860 해체, 선별 및 원료 재생업 철스크랩
3 IBKS제5호스팩 254120 금융 지원 서비스업 기업인수합병
4 KD건설 044180 건물 건설업 몰드베이스(Mold Base)
상장일 결산월 대표자명 홈페이지 지역
0 2010-10-15 12월 김성수 http://www.cjenm.com 서울특별시
1 2001-07-26 12월 문종석 http://www.cjfreshway.com 경기도
2 1997-07-04 12월 김동은 http://www.gmrmaterials.com 충청남도
3 2016-12-02 12월 김형준 NaN 서울특별시
4 2000-11-16 12월 구정회 http://dymoldtech.co.kr 경기도
야후 파이낸스 API를 이용하여 주가정보 수집하기에서 나온 방법대로 위에 나와있는 5개 종목의 최근 수정주가를 출력해보자.
from pandas_datareader import data
results = {}
for code in kosdaq_stocks.종목코드.head():
results[code] = data.DataReader(code + '.KQ', 'yahoo', '2017-01-01', None)
df = pd.concat(results, axis=1)
df.loc[:, pd.IndexSlice[:, 'Adj Close']].tail()
Out:
032860 044180 051500 130960 254120
Adj Close Adj Close Adj Close Adj Close Adj Close
Date
2017-09-01 635.0 213.0 41550.0 75600.0 2070.0
2017-09-04 624.0 207.0 40400.0 75000.0 2070.0
2017-09-05 625.0 207.0 40750.0 75100.0 2040.0
2017-09-06 619.0 211.0 38250.0 76900.0 2055.0
2017-09-07 620.0 211.0 39000.0 77000.0 2060.0
※. 전체 코드 정리
from pandas_datareader import data
import urllib.parse
import pandas as pd
# 마켓 지정 (딕셔너리)
MARKET_CODE_DICT = {
'kospi': 'stockMkt',
'kosdaq': 'kosdaqMkt',
'konex': 'konexMkt'
}
# 전체 주소 : http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13
DOWNLOAD_URL = 'kind.krx.co.kr/corpgeneral/corpList.do'
def download_stock_codes(market=None, delisted=False):
params = {'method': 'download'}
if market.lower() in MARKET_CODE_DICT:
params['marketType'] = MARKET_CODE_DICT[market]
if not delisted:
params['searchType'] = 13
params_string = urllib.parse.urlencode(params)
request_url = urllib.parse.urlunsplit(['http', DOWNLOAD_URL, '', params_string, ''])
df = pd.read_html(request_url, header=0)[0]
# 종목코드 6자리 맞추기
df.종목코드 = df.종목코드.map('{:06d}'.format)
return df
# 원하는 마켓 정보 불러오기
kosdaq_stocks = download_stock_codes('kosdaq')
#kosdaq_stocks = download_stock_codes('kospi')
# 불러온 데이터에서 헤드만 선택
kosdaq_stocks.head()
# 결과를 담을 리스트 생성
results = {}
# 종목코드 헤드 갯수만큼 코드 및 날자 results에 저장
for code in kosdaq_stocks.종목코드.head():
results[code] = data.DataReader(code + '.KQ', 'yahoo', '2017-01-01', None)
#results[code] = data.DataReader(code + '.KS', 'yahoo', '2017-01-01', None)
# 결과값중 최근 수정값만 선택(axis=1)
df = pd.concat(results, axis=1)
# Adj Close만 선택
df.loc[:, pd.IndexSlice[:, 'Adj Close']]
#print(results)
결과 :
Out:
032860 044180 051500 130960 254120
Adj Close Adj Close Adj Close Adj Close Adj Close
Date
2017-09-01 635.0 213.0 41550.0 75600.0 2070.0
2017-09-04 624.0 207.0 40400.0 75000.0 2070.0
2017-09-05 625.0 207.0 40750.0 75100.0 2040.0
2017-09-06 619.0 211.0 38250.0 76900.0 2055.0
2017-09-07 620.0 211.0 39000.0 77000.0 2060.0
'Others > PYTHON' 카테고리의 다른 글
[ Link ] Plot (0) | 2019.12.13 |
---|---|
[ Link ] Pandas DataFrame (0) | 2019.11.28 |
[ PY ] 파이썬 주식 정보 가져오기 / Pandas_DataReader / FinanceDataReader (0) | 2019.11.15 |
[ PY ] 자료형 dict(딕셔너리) (구조의 추가/수정/삭제/관련함수) (0) | 2019.11.12 |
[ PY ] 파이썬 클래스, 모듈 정리 / 파이썬 자바 비교 (0) | 2019.11.12 |