#002 Pykrx 주식 종목 정보 얻기: Python, postgreSQL

이번 포스팅은 Python을 이용하여 pykrx 라이브러리를 통해 주식 종목 정보를 가져와서 데이터베이스에 저장하는 방법에 대한 글입니다.
저번 포스팅에서는 키움 API에 접속하기 위한 32비트 파이썬 가상환경을 만들었습니다. 다만 증권사 API는 주로 실시간 매매정보를 제공하다 보니 취향에 맞는 데이터가 많지 않다. 실시간 거래 환경을 구축하는 방법에 대한 정보를 찾고 있다면 찾을 수 있지만 모두 약간 까다 롭습니다. 프로그램을 알고 있음에도 불구하고 시작하기가 쉽지 않습니다.
또한 이웃의 요청을 들었을 때 외국 기관의 현황을 보고 싶었습니다. 공기업에 화면에 나오게 해달라고 요청했는데 모든 항목이 다 나오진 않네요. 날 미치게 해…
이 경우 SQL 검색이 가장 좋습니다.
최종 형태는 아직 결정되지 않았지만 시작은 절반으로 시작하겠습니다.
Python에서 액세스할 수 있는 모듈
파이크엑스 https://github.com/sharebook-kr/pykrx
GitHub – sharebook-kr/pykrx: KRX 공유 정보 스크래핑
KRX 주식정보 스크랩. GitHub에서 계정을 만들어 sharebook-us/pykrx 개발에 기여하세요.
github.com
pykrx 모듈은 네이버 금융 및 KRX 정보 데이터 시스템에서 지속적으로 주가 정보를 스크랩하여 Github에 업데이트합니다.
국내 재고 정보만 제공됩니다.
pandas_datareader
pandas_datareader는 주식뿐만 아니라 다양한 통계 데이터를 제공할 수 있는 API를 제공하는 API입니다.
인벤토리 정보는 NAVER와 YAHOO를 선택할 수 있습니다.
금융 데이터 리더 https://financedata.github.io/posts/finance-data-reader-users-guide.html
FinanceDataReader 사용 설명서
FinanceDataReader 사용 설명서
Financedata.github.io
FinanceDataReader는 한국 주식 시세, 미국 주식 시세, 지수, 환율, 암호화폐 가격, 주식 목록 등을 제공합니다.
pandas_datareader는 많은 버그를 가지고 빌드되었다고 하는데, 지속적으로 업데이트되는지는 모르겠습니다.
금융 https://pypi.org/project/yfinance/
재원
Yahoo!에서 시장 데이터 다운로드 금융 API
pypi.org
yfinance는 Ran Aroussi가 개발한 오픈 소스 API로 Yahoo Finance에서 제공하는 데이터에 액세스할 수 있습니다.
위의 약 4개는 오픈 소스이며 Python에서 액세스할 수 있습니다. 네 가지 모두 데이터 무결성을 보장하지 않습니다.
예를 들어 유동성의 경우 수정된 주가가 주가에 반영되지만 상장주식수는 그대로 유지되는 경우가 있다. 4개 위치 중 일부에서는 상장 주식 수가 고정되었고 일부 위치에서는 고정되지 않았습니다…
아무튼 잘 선택하셔서 사용하시길 바랍니다.
PostgreSQL DB 및 TABLE 생성
약 1년 전, 한동안 데이터 분석을 공부할 때 MariaDB를 사용했습니다.
재고 DB 생성
마우스 오른쪽 버튼을 클릭하고 클릭하십시오!
로컬에서만 사용하기 때문에 큰 설정이 필요하지 않습니다. PostgreSQL에 맡기십시오.
티커 테이블 생성
1년전 기사정보 http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020201
KRX 정보 데이터 시스템
등 한국거래소의 정보자료를 통합하여 제공하는 서비스 나. 주식 및 파생상품의 시세정보(Marketdata), 공매도정보 및 투자분석정보(SMILE)
data.krx.co.kr
여기에서 다운받아 사용했습니다.
배치 프로그램을 실행할 때마다 다운로드하는 것은 꽤 귀찮은 일입니다. 그래서 이번에는 krx 모듈을 사용하여 항목에 대한 코드, 이름 및 시장 분류만 사용하기로 결정했습니다.
create table public.ticker
(
ticker char(6) not null
primary key,
ticker_name varchar(50) not null,
market varchar(10) not null,
last_update timestamp(6) default now() not null
);
comment on table public.ticker is '종목정보';
comment on column public.ticker.ticker is '종목';
comment on column public.ticker.ticker_name is '종목명';
comment on column public.ticker.market is '시장구분';
comment on column public.ticker.last_update is '최종수정일';
alter table public.ticker
owner to postgres;
create index idx_ticker_ticker_name
on public.ticker (ticker_name);
위의 SQL로 생성되었습니다.
krx 모듈 설치
krx 모듈 설치
모듈을 설치하는 방법에는 여러 가지가 있습니다.
1. pip 설치 pykrx
2. conda는 pykrx를 설치합니다.
3. Pycharm 패키지 관리자에서 설치하는 방법
설정 – 프로젝트 – Python 인터프리터 당신이 선택하는 경우

Conda Manager 사용을 클릭하여 설치된 패키지 목록을 봅니다.
‘+’를 누르면

pykrx를 검색하고 패키지 설치를 클릭합니다.
3가지 방법 중 2~3가지가 안 될 경우에만 1번으로 설치하세요. (그런 경우가 많습니다.)
krx에서 데이터 가져오기
DB 연결
DB 연결 기능이 해제되었습니다.
# postgresql stock database connect
import psycopg2
config = {
"user": "postgres",
"password": "1234",
"host": "localhost",
"database": "stock",
"port": 5432,
}
def getConn():
conn = psycopg2.connect(**config)
return conn
기사 정보 가져오기 및 업그레이드
pykrx가 아이템과 아이템명을 같이 출력해주면 좋겠지만, 아이템명을 따로 조회해서 따로 테이블 처리 모듈을 분리해서 성능이 나오지 않았습니다.
매일 일괄적으로 실행해야 하는 프로그램이라 하나로 합쳤습니다.
import sys
from pykrx import stock
from dbconn import getConn # DB CONNECT
# 성능 문제로 하나로 합침
# stock DB connect
conn = getConn()
def ticker_insert(ticker, ticker_name, market):
# 커서
cur = conn.cursor()
# insert 문 구성
exe_sql=""' insert into ticker values(%s, %s, %s, now())
on conflict(ticker)
do update set ticker_name = %s
, market = %s
, last_update = now()
'''
try:
# sql 실행
cur.execute(
exe_sql,
(
ticker,
ticker_name,
market,
ticker_name,
market
),
)
except Exception as e:
print("Exception occured :", str(e))
return 1
return 0
# ticker 등록
def ticker_reg(market):
i = 0
for ticker in stock.get_market_ticker_list(market=market):
i += 1
name = stock.get_market_ticker_name(ticker)
rs = ticker_insert(ticker, name, market)
if rs == 1:
print(ticker, name, market, '등록 실패!' )
break
# 100건 마다 commit
if i % 100 == 0:
conn.commit()
if rs == 0:
print(market,'ticker', i, '건 등록 성공!!!')
else:
print(market, 'ticker 등록 실패!!!')
return 1
return 0
# pykrx ticker 등록
# KOSPI
rs = ticker_reg('KOSPI')
if rs != 0:
sys.exit('error')
# KOSDAQ
rs = ticker_reg('KOSDAQ')
if rs != 0:
sys.exit('error')
# KONEX
rs = ticker_reg('KONEX')
if rs != 0:
sys.exit('error')
# pykrx ticker 등록 종료
# commit 및 db 연결종료
conn.commit()
conn.close()
KOSPI ticker 943 건 등록 성공!!!
KOSDAQ ticker 1632 건 등록 성공!!!
KONEX ticker 133 건 등록 성공!!!
시작입니다. 앞으로 필요한 테이블이 생성되고 프로그램이 추가로 수정됩니다.
조건을 지정하고 온스크린 GUI로 조회할 수 있는 방식으로 수행하기를 바랍니다.
나는 잠시 pyqt를 보는 것을 멈췄지만 무엇입니까?
나는 단지 SQL로 그것을 볼 필요가 있습니다. ㅋㅋㅋ
감사해요
| 해! SQL을 찾아주셔서 감사합니다. 댓글은 큰 힘이 됩니다. |