sharebook-kr / pykrx Goto Github PK
View Code? Open in Web Editor NEWKRX 주식 정보 스크래핑
KRX 주식 정보 스크래핑
디버깅을 위한 로그 메시지를 추가해야 함.
get_market_ohlcv_by_date
와 get_market_ohlcv_by_ticker
함수를 구분하지 않고 get_market_ohlcv
함수 하나로 wrapping 해야 한다. 입력된 파라미터에 따라 함수 내부에서 두 함수를 선택하도록 수정한다.
위 함수는 하나의 예제이며, 전체 api의 입/출력 인터페이스를 검토해야 한다.
It seems that MKD30015 not working since 20200917.
pykrx/stock/api.py의 get_business_days에서 month를 12월 넣으면 오류가 발생합니다.
year 2020, month 12로 입력시,
strt = 20201201
last = 20201301의 값을 get_market_ohlcv_by_date에 입력해서 오류가 나네요.
month를 1~12월로 검증하는 로직이 필요해 보입니다!
좋은 패키지 감사합니다.
def get_business_days(year: int, mon: int) -> list: strt = "{}{:02d}01".format(year, mon) last = "{}{:02d}01".format(year, mon+1) df = get_market_ohlcv_by_date(strt, last, "000020")
get_market_ohlcv_by_date 는 한 종목씩 데이터를 가져오는 구조이던데요...
특정일 하루(예를 들어서, 어제하루 또는 장 종료된 거래 당일)의 ohlcv 데이터를 전종목 대상으로 가져오는 방법이 있으면 좋을 것 같아서요...
30036에서 기간 (20150622 - 20150810) 조회하면 다음 결과를 확인할 수 있다.
현대하이스코
동성하이켐
SK브로드밴드
와이즈파워
한국테크놀로지우
에이스하이텍
디아이디
경남은행
다음 우선주에 대한 폐지 정보도 나와야 하는데 얻을 수 없다.
보해양조우
동부하이텍2우B
아남전자우
이를 대체할 방법을 찾아야 함.
get_market_price_change_by_ticker 함수 호출 시에 반환하는 종목들의 시가가
krx 시가와 일치하지 않는 문제가 발생합니다.
test case:
"20200319" - "20200503" 기간으로 설정하고, 신풍제약의 리턴값 시가를 보면 7800인데
"20200319"의 해당 종목 시가는 실제로는 8120 입니다. get_market_ohlcv_by_date 으로 신풍제약 해당 날짜 검색시에는 시가로 8120을 리턴하여 문제 없습니다.
API로는 2347개의 티커가 반환된다.
tickers = stock.get_stock_ticker_list('20190405 ')
print(len(tickers))
웹싸이트에서 동일 날짜에 2388개의 티커가 조회된다.
http://marketdata.krx.co.kr/mdi#document=040602
get_market_trading_value_and_volume_by_ticker 함수에서
investor 변환 시, "외국인": 9000 이 빠져 있습니다.
그래서 함수를 호출하면
외국인 결과는 0으로 반환하는 에러가 발생합니다.
주요 재무정보를 20.12 데이터가 아닌, 19.12 연간실적 데이터를 읽어오는듯 합니다.
EPS값이 19년도 값으로 돼있어서, PER등의 값들이 이상합니다.
최근 네이버가 페이지를 수정 이후
해당 데이터를 가져오는게 안되는 걸로 알고 있습니다.
따라서, pd.read_html()로 구현하셨으면 Not found table로 리턴 되더라구요..
혹시 KRX에서 가져오는 자료는 없나요?
df = stock.get_market_trading_value_and_volume_by_ticker("20200907", investor="연기금")
print(df.head(2))
매수/매도의 거래량 및 거래대금이 같은 값이 출력된다.
종목명 매수거래량 매도거래량 순매수거래량 매수거래대금 매도거래대금 순매수거래대금
종목코드
000020 동화약품 813108 813108 0 20647345250 20647345250 0
000040 KR모터스 8363034 8363034 0 8205581530 8205581530 0
안녕하세요.
이번에 전체종목시세조회 기능을 추가해 주셔서 감사드립니다.
그런데, 새로추가된 기능인 "2.1.1.3 전체 종목 시세 조회"를 실행해보니,
종목수 300개 까지만 가져오던데요... 전체 종목은 안되는 것일지요?
'3노드디지탈', '코웰이홀딩스', '에스앤씨엔진그룹', '오가닉티코스메틱', '헝셩그룹', '네프로아이티',
'로스웰', '성융광전투자', '차이나그레이트', 'GRT', '윙입푸드', '이스트아시아홀딩스', '컬러레이',
'완리', '웨이포트', '차이나하오란', '연합과기', '범화건설', '중국고섬', '울산실업', '평산차업',
'SBI모기지', '중국원양자원'
이런 종목들은 검색이 안됩니다.
안녕하세요?
Readme의 2.1.1.5 일자별 DIV/BPS/PER/EPS 조회
에서
df = stock.get_market_fundamental_by_date("20180301", "20180320", '005930')
print(df.head(2))
위 코드 실행 시 아래와 같이 에러가 발생하는데요, pandas import가 되지 않은것 같습니다.
~/anaconda3/lib/python3.7/site-packages/pykrx/website/krx/market/wrap.py in get_market_fundamental_by_date(fromdate, todate, isin, market)
130 "PER": np.float64, "EPS": np.int32}, )
131 df = df.set_index('날짜')
--> 132 df.index = pd.to_datetime(df.index, format='%Y%m%d')
133 return df.sort_index()
134
NameError: name 'pd' is not defined
안녕하세요, 최근에 pykrx를 알게되어 유용하게 사용하는 유저입니다. 다양한 기능이 깔끔하게 설계되어 편하게 사용하고 있습니다. 감사합니다!
혹시 전종목 주가 조회할 때 전일대비 필드를 추가해주실 수 있을지 문의드립니다.
개별종목에 대한 여러주가를 가져올 때는 이전 종가를 이용해 전일대비를 구할 수 있는데 전 종목의 경우 전날을 호출해서 구해야 하더라구요.
@dataframe_empty_handler
def get_market_ohlcv_by_ticker(date: str, market: str="KOSPI") -> DataFrame:
"""티커별로 정리된 전종목 OHLCV
Args:
date (str): 조회 일자 (YYYYMMDD)
market (str): 조회 시장 (KOSPI/KOSDAQ/ALL). Defaults to KOSPI.
Returns:
DataFrame:
종목명 시가 고가 저가 종가 거래량 거래대금
티커
060310 3S 2150 2390 2150 2190 981348 2209370985
095570 AJ네트웍스 3135 3200 3100 3130 89871 282007385
006840 AK홀딩스 17050 17200 16500 16500 30567 512403000
054620 APS홀딩스 8550 8740 8400 8650 647596 5525789290
265520 AP시스템 22150 23100 22050 22400 255846 5798313650
"""
market = {"ALL": "ALL", "KOSPI": "STK", "KOSDAQ": "KSQ", "KONEX": "KNX"}[market]
df = 전종목시세().fetch(date, market)
df = df[['ISU_SRT_CD', 'ISU_ABBRV', 'TDD_OPNPRC', 'TDD_HGPRC', 'TDD_LWPRC', 'TDD_CLSPRC', 'ACC_TRDVOL', 'ACC_TRDVAL', ]]
df.columns = ['티커', '종목명', '시가', '고가', '저가', '종가', '거래량', '거래대금']
KRX 에서 제공하는 데이터를 디버깅 해보니 CMPPREVDD_PRC
필드가 전일대비인 것으로 보입니다.
오류메시지는 다음과 같습니다.
module 'pykrx.website.krx' has no attribute 'get_market_trading_value_and_volume_by_ticker'
함수가 없어진 것인지요?
안녕하세요.
덕분에 잘 사용하고 있었습니다.
근데 이번 KRX 사이트 리뉴얼로 새로운 버전을다운받아 사용하려했는데
from pykrx import stock 명령어에서 아래와 같은 에러가 나옵니다.
python3.5 환경에서의 문제인것 같은데 이전처럼 낮은 버전의 python에서도 사용할 수 있었으면 좋겠습니다.
Traceback (most recent call last):
File "/volume1/DART/python/getStockCode.py", line 5, in
from pykrx import stock
File "/volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/pykrx/stock/init.py", line 1, in
from .api import *
File "/volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/pykrx/stock/api.py", line 20
print(f"market 옵션이 올바르지 않습니다." )
^
SyntaxError: invalid syntax
Thank you for your help.
My code still doesn't work.
1 def saveMarketCapDaily(targetDayStr):
2 targetDayStr="20200917"
3 print(stock.get_market_ticker_list("20200921"))
4 dfTargetDay = stock.get_market_cap_by_ticker(targetDayStr)
5 if (dfTargetDay.empty):
6 print('targetDay empty. day: ' + targetDayStr)
7 return -1
..
Environment
종목코드 상장일 상장폐지일 시장
000010 2002-01-01 2010-01-03 코스피
000020 2001-01-01 코스닥
안녕하세요
매년 인덱스 구성종목을 조회하려고 stock.get_index_portfolio_deposit_file을 쓰려고 하는데요, function 설명 상 param date은 YYMMDD 형태로 조회일자를 입력하도록 되어 있어서 stock.get_index_portfolio_deposit_file("1028", "171231") 와 같은 식으로 입력을 했습니다만, 반환되는 값이 없네요. 혹시 제가 param을 잘못 입력한건가요?
def today_stock_company():
global df_stock
today = stock.get_nearest_business_day_in_a_week()
df_stock = stock.get_market_ohlcv_by_ticker(today)
df_stock["종목명"] = df_stock["종목명"].str.upper()
df_stock = df_stock.reset_index()
today_stock_company()
이걸실행하면
JSONDecodeError Traceback (most recent call last)
in ()
28 df_stock = df_stock.reset_index()
29
---> 30 today_stock_company()
31
32 #### 종목 코드 검색
in today_stock_company()
23 def today_stock_company():
24 global df_stock
---> 25 today = stock.get_nearest_business_day_in_a_week()
26 df_stock = stock.get_market_ohlcv_by_ticker(today)
27 df_stock["종목명"] = df_stock["종목명"].str.upper()
/home/pi/.local/lib/python3.7/site-packages/pykrx/stock/api.py in get_nearest_business_day_in_a_week()
36 curr = _datetime2string(curr)
37 prev = _datetime2string(prev)
---> 38 df = krx.get_index_ohlcv_by_date(prev, curr, "1001")
39 return df.index[-1].strftime("%Y%m%d")
40
/home/pi/.local/lib/python3.7/site-packages/pykrx/website/comm/util.py in wrapper(*args, **kwargs)
5 def wrapper(*args, **kwargs):
6 try:
----> 7 return func(*args, **kwargs)
8 except (AttributeError, KeyError, TypeError):
9 return DataFrame()
/home/pi/.local/lib/python3.7/site-packages/pykrx/website/krx/market/wrap.py in get_index_ohlcv_by_date(fromdate, todate, ticker)
383 20190131 2222.879883 2222.879883 2201.219971 2204.850098 545248000
384 """
--> 385 df = MKD20011_SUB().fetch(fromdate, todate, ticker[1:], ticker[0])
386 df = df[['trd_dd', 'opnprc_idx', 'hgprc_idx', 'lwprc_idx',
387 'clsprc_idx', 'acc_trdvol']]
/home/pi/.local/lib/python3.7/site-packages/pykrx/website/krx/market/core.py in fetch(self, fromdate, todate, index, market)
299 idx_cd = "1{}".format(index)
300 result = self.post(idx_cd=idx_cd, ind_tp_cd=market, idx_ind_cd=index, bz_dd=todate,
--> 301 chartType="line", chartStandard="srate", fromdate=fromdate, todate=todate)
302 return DataFrame(result['output'])
303
/home/pi/.local/lib/python3.7/site-packages/pykrx/website/krx/krxio.py in post(self, **params)
15 params.update({"code": otp.text})
16 resp = super().read(**params)
---> 17 return resp.json()
18
19 @Property
/usr/lib/python3/dist-packages/requests/models.py in json(self, **kwargs)
895 # used.
896 pass
--> 897 return complexjson.loads(self.text, **kwargs)
898
899 @Property
/usr/lib/python3/dist-packages/simplejson/init.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, use_decimal, **kw)
516 parse_constant is None and object_pairs_hook is None
517 and not use_decimal and not kw):
--> 518 return _default_decoder.decode(s)
519 if cls is None:
520 cls = JSONDecoder
/usr/lib/python3/dist-packages/simplejson/decoder.py in decode(self, s, _w, _PY3)
368 if _PY3 and isinstance(s, bytes):
369 s = str(s, self.encoding)
--> 370 obj, end = self.raw_decode(s)
371 end = _w(s, end).end()
372 if end != len(s):
/usr/lib/python3/dist-packages/simplejson/decoder.py in raw_decode(self, s, idx, _w, _PY3)
398 elif ord0 == 0xef and s[idx:idx + 3] == '\xef\xbb\xbf':
399 idx += 3
--> 400 return self.scan_once(s, idx=_w(s, idx).end())
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
이런오류가발생해요
from pykrx import stock
import time
import sys
위와 같이 사용하고 있는 중에 에러가 발생했습니다.
Test로 아래와 같이 사용했습니다.
1)df = stock.get_market_fundamental_by_ticker('20200918')
2)df = get_market_ticker_name("000660")
1)의 경우 아래와 같이 에러 메시지가 발생합니다.
Traceback (most recent call last):
File "", line 1, in
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/stock/api.py", line 197, in get_market_fundamental_by_ticker
df = krx.get_market_fundamental_by_ticker(date, market)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/comm/util.py", line 7, in wrapper
return func(*args, **kwargs)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/krx/market/wrap.py", line 167, in get_market_fundamental_by_ticker
df = MKD30009_0().fetch(date, market)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/krx/market/core.py", line 107, in fetch
result = self.post(market_gubun=market, gubun=1, schdate=date)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/krx/krxio.py", line 17, in post
return resp.json()
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/requests/models.py", line 898, in json
return complexjson.loads(self.text, **kwargs)
File "/root/anaconda3/envs/stock/lib/python3.5/json/init.py", line 319, in loads
return _default_decoder.decode(s)
File "/root/anaconda3/envs/stock/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/root/anaconda3/envs/stock/lib/python3.5/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
2)의 경우 아래와 같이 에러 메시지가 발생합니다.
Traceback (most recent call last):
File "", line 1, in
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/stock/api.py", line 59, in get_market_ticker_name
return krx.get_stock_name(ticker)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/comm/util.py", line 7, in wrapper
return func(*args, **kwargs)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/krx/market/ticker.py", line 116, in get_stock_name
s = _StockTicker().get_series(ticker)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/comm/util.py", line 24, in init
super(class_w, self).init(*args, **kwargs)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/krx/market/ticker.py", line 44, in init
self.listed = self._get_stock_info_listed()
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/comm/util.py", line 7, in wrapper
return func(*args, **kwargs)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/krx/market/ticker.py", line 60, in _get_stock_info_listed
df = _StockFinder().fetch(market)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/krx/market/ticker.py", line 20, in fetch
result = self.post(mktsel=market, searchText=name)
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/pykrx/website/krx/krxio.py", line 17, in post
return resp.json()
File "/root/anaconda3/envs/stock/lib/python3.5/site-packages/requests/models.py", line 898, in json
return complexjson.loads(self.text, **kwargs)
File "/root/anaconda3/envs/stock/lib/python3.5/json/init.py", line 319, in loads
return _default_decoder.decode(s)
File "/root/anaconda3/envs/stock/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/root/anaconda3/envs/stock/lib/python3.5/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
pip freeze 출력 결과는 아래와 같습니다.
certifi==2018.8.24
chardet==3.0.4
idna==2.10
numpy==1.18.5
pandas==0.25.3
pykrx==0.1.41
pytz==2020.1
requests==2.24.0
six==1.15.0
urllib3==1.25.10
xlrd==1.2.0
zope.interface==5.1.0
Traceback (most recent call last):
File "a.py", line 12, in
print(krx.get_shorting_status_by_date("20181210", "20181212", "005930"))
File "D:\0.prj_python\pykrx-master\pykrx\krx.py", line 53, in get_shorting_status_by_date
return SRT02010100.scraping(isin, fromdate, todate)
File "D:\0.prj_python\pykrx-master\pykrx\shorting.py", line 48, in scraping
df = df.replace({',': ''}, regex=True).astype(np.int64)
File "D:\python372\lib\site-packages\pandas-0.24.0rc1-py3.7-win32.egg\pandas\core\generic.py", line 5681, in astype
**kwargs)
File "D:\python372\lib\site-packages\pandas-0.24.0rc1-py3.7-win32.egg\pandas\core\internals\managers.py", line 531, in astype
return self.apply('astype', dtype=dtype, **kwargs)
File "D:\python372\lib\site-packages\pandas-0.24.0rc1-py3.7-win32.egg\pandas\core\internals\managers.py", line 395, in apply
applied = getattr(b, f)(**kwargs)
File "D:\python372\lib\site-packages\pandas-0.24.0rc1-py3.7-win32.egg\pandas\core\internals\blocks.py", line 534, in astype
**kwargs)
File "D:\python372\lib\site-packages\pandas-0.24.0rc1-py3.7-win32.egg\pandas\core\internals\blocks.py", line 633, in _astype
values = astype_nansafe(values.ravel(), dtype, copy=True)
File "D:\python372\lib\site-packages\pandas-0.24.0rc1-py3.7-win32.egg\pandas\core\dtypes\cast.py", line 685, in astype_nansafe
return lib.astype_intsafe(arr.ravel(), dtype).reshape(arr.shape)
File "pandas_libs\lib.pyx", line 530, in pandas._libs.lib.astype_intsafe
ValueError: invalid literal for int() with base 10: '40,002'
안녕하세요, 사용하신 code architecture를 이용해 외국인 보유 주식 한도 (https://marketdata.krx.co.kr/mdi#document=13020402) 를 스크레이핑 하려고 해 보았습니다
` class MKD81006(KrxFileIo):
@Property
def bld(self):
return "MKD/13/1302/13020402/mkd13020402"
def fetch(self, date, mkt, limitType):
result = self.post(schdate=date, market_gubun=mkt, lmt_tp=limitType)
return result`
df = MKD81006().fetch("20200630", "ALL", "1") 으로 해 보았습니다.
좋은 라이브러리를 제공해 주셔서 감사합니다!
안녕하세요,
지난번과 마찬가지로 만들어주신 framework를 이용해 새로운 functionality를 만들어 보았습니다. 혹시 다음 release 때 추가해 주실 수 있으신가요?
감사드립니다!
class MKD30017(KrxFileIo):
@property
def bld(self):
return "MKD/04/0404/04040400/mkd04040400"
def fetch(self, date, mkt_type, instr_type, inv_type):
"""입력사항:시장구분, 투자주체, 조회일자, 검색항목
투자자별 순위 (30017)
stctype: ALL, STK, KSQ, KNX
var_invr_cd:
# 1000 - 금융투자; # 2000 보험 #3000 투신 # 3100 사모 #4000 은행 #5000 기타금융
# 6000 연기금 7050 기관합계 # 7100 기타법인 # 8000 개인 # 9000 외국인 # 9001 기타외국인 # 9999 전체
schdate: query date
etctype: ST, EF, EW, EN
"""
result = self.post(stctype=instr_type, var_invr_cd=inv_type, schdate=date, etctype=mkt_type)
return pd.read_excel(result)
pykrx/pykrx/website/krx/market/core.py
Line 49 in ef9c96a
실제 조회 싸이트 가보니 아래와 같이 바뀌어져 있는데 이것이 원인 이지 아닐까 조심스래 말씀 드려봅니다.
http://marketdata.krx.co.kr/contents/MKD/04/0402/04020100/MKD04020100T3T2.jsp
어제 데이터를 긁어오는 것을 밤에 실행해놓고 아침에 보니 중간 쯤에서 부터 에러가 나서 확인해 보니
아이피가 차단된 것 같아요.
다른 아이피에서는 데이터를 잘 가져오는데, 해당 장비에서는 데이터를 전혀 못가져오네요.
혹시 어떻게 하면 해제할 수 있는지 알 수 있을지요?
매뉴얼대로 코드를 넣어도 데이터를 불러오지 못하고
빈 데이터프레임을 반환하고 있습니다.
여전히 18개만 출력 됩니다
stock.get_exhaustion_rates_of_foreign_investment_by_ticker("20210118","KOSPI")
api.py
delete the line: df.columns.name = get_market_ticker_name(ticker)
it will be ok
값을 전혀 받아오지 못하는 것 같습니다.
변수에 "KOSDAQ", "KSQ", "코스닥" 무엇을 집어 넣어도, 코스피 데이터가 반환되는 것을 여러 함수에서 확인하였습니다.
pykrx를 돌렸을때 데이터를 받아오지 못합니다.
---에러 발생현황---
File "G:\Develop\MyBetaPortfolio\mybetaportfolio_backend\korea_data.py", line 186, in
routine = Routine()
File "G:\Develop\MyBetaPortfolio\mybetaportfolio_backend\korea_data.py", line 109, in init
self.get = krx.Get()
File "G:\Develop\MyBetaPortfolio\mybetaportfolio_backend\product_info\api\krx.py", line 23, in init
self.stock_code_list = stock.get_market_ticker_list(self.today)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\stock\api.py", line 48, in get_market_ticker_list
return krx.get_stock_ticker_list(date)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\comm\util.py", line 7, in wrapper
return func(*args, **kwargs)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\krx\market\ticker.py", line 118, in get_stock_ticker_list
stock = _StockTicker()
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\comm\util.py", line 24, in init
super(class_w, self).init(*args, **kwargs)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\krx\market\ticker.py", line 45, in init
df_listed = self._get_stock_info_listed()
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\comm\util.py", line 7, in wrapper
return func(*args, **kwargs)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\krx\market\ticker.py", line 65, in _get_stock_info_listed
df = StockFinder().fetch(market)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\krx\market\ticker.py", line 21, in fetch
result = self.post(mktsel=market, searchText=name)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\krx\krxio.py", line 17, in post
return resp.json()
File "C:\Users\dldjs\Anaconda3\lib\site-packages\requests\models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\simplejson_init.py", line 525, in loads
return _default_decoder.decode(s)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\simplejson\decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\simplejson\decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
(base) G:>python G:\Develop\MyBetaPortfolio\mybetaportfolio_backend\korea_data.py
20200827
Traceback (most recent call last):
File "G:\Develop\MyBetaPortfolio\mybetaportfolio_backend\korea_data.py", line 186, in
routine = Routine()
File "G:\Develop\MyBetaPortfolio\mybetaportfolio_backend\korea_data.py", line 109, in init
self.get = krx.Get()
File "G:\Develop\MyBetaPortfolio\mybetaportfolio_backend\product_info\api\krx.py", line 23, in init
self.stock_code_list = stock.get_market_ticker_list(self.today)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\stock\api.py", line 48, in get_market_ticker_list
return krx.get_stock_ticker_list(date)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\comm\util.py", line 7, in wrapper
return func(*args, **kwargs)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\krx\market\ticker.py", line 118, in get_stock_ticker_list
stock = _StockTicker()
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\comm\util.py", line 24, in init
super(class_w, self).init(*args, **kwargs)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\krx\market\ticker.py", line 45, in init
df_listed = self._get_stock_info_listed()
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\comm\util.py", line 7, in wrapper
return func(*args, **kwargs)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\krx\market\ticker.py", line 65, in _get_stock_info_listed
df = StockFinder().fetch(market)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\krx\market\ticker.py", line 21, in fetch
result = self.post(mktsel=market, searchText=name)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\pykrx\website\krx\krxio.py", line 17, in post
return resp.json()
File "C:\Users\dldjs\Anaconda3\lib\site-packages\requests\models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\simplejson_init.py", line 525, in loads
return _default_decoder.decode(s)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\simplejson\decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "C:\Users\dldjs\Anaconda3\lib\site-packages\simplejson\decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
*입력날짜는 YYYYMMDD 형식으로 입력했습니다.
---- 설치된 패키지 리스트
alabaster==0.7.12
anaconda-client==1.7.2+6.g6d462d5
anaconda-navigator==1.9.12
anaconda-project==0.8.3
aniso8601==8.0.0
argh==0.26.2
asgiref==3.2.7
asn1crypto==1.3.0
astroid==2.3.3
astropy==4.0
atomicwrites==1.3.0
attrs==19.3.0
autopep8==1.4.4
awsebcli==3.18.2
Babel==2.8.0
backcall==0.1.0
backports.functools-lru-cache==1.6.1
backports.shutil-get-terminal-size==1.0.0
backports.tempfile==1.0
backports.weakref==1.0.post1
bcrypt==3.1.7
beautifulsoup4==4.9.1
bitarray==1.2.1
bkcharts==0.2
bleach==3.1.0
bokeh==1.4.0
boto==2.49.0
botocore==1.15.49
Bottleneck==1.3.2
bs4==0.0.1
cement==2.8.2
certifi==2020.4.5.1
cffi==1.14.0
chardet==3.0.4
click==7.1.2
click-plugins==1.1.1
cligj==0.5.0
cloudpickle==1.3.0
clyent==1.2.2
colorama==0.4.3
comtypes==1.1.7
conda==4.8.2
conda-build==3.18.11
conda-package-handling==1.6.0
conda-verify==3.4.2
contextlib2==0.6.0.post1
cryptography==2.9.2
cycler==0.10.0
Cython==0.29.15
cytoolz==0.10.1
dask==2.11.0
DateTime==4.3
decorator==4.4.1
defusedxml==0.6.0
Deprecated==1.2.10
diff-match-patch==20181111
distributed==2.11.0
Django==3.0.7
django-cors-headers==3.4.0
django-debug-toolbar==2.2
django-rest-framework==0.1.0
djangorestframework==3.11.0
docutils==0.15.2
entrypoints==0.3
et-xmlfile==1.0.1
fastcache==1.1.0
filelock==3.0.12
finance-datareader==0.9.6
flake8==3.7.9
Flask==1.1.2
Flask-RESTful==0.3.8
fsspec==0.6.2
future==0.16.0
gevent==1.4.0
gitdb==4.0.5
GitPython==3.1.2
glob2==0.7
greenlet==0.4.15
h5py==2.10.0
HeapDict==1.0.1
html5lib==1.0.1
hypothesis==5.5.4
idna==2.7
iexfinance==0.4.3
imageio==2.6.1
imagesize==1.2.0
importlib-metadata==1.5.0
install==1.3.3
intervaltree==3.0.2
ipykernel==5.1.4
ipython==7.12.0
ipython-genutils==0.2.0
ipywidgets==7.5.1
isort==4.3.21
itsdangerous==1.1.0
jdcal==1.4.1
jedi==0.14.1
Jinja2==2.11.2
jmespath==0.10.0
joblib==0.14.1
json5==0.9.1
jsonschema==3.2.0
jupyter==1.0.0
jupyter-client==5.3.4
jupyter-console==6.1.0
jupyter-core==4.6.1
jupyterlab==1.2.6
jupyterlab-server==1.0.6
keyring==21.1.0
kiwisolver==1.2.0
lazy-object-proxy==1.4.3
libarchive-c==2.8
llvmlite==0.31.0
locket==0.2.0
lxml==4.5.2
MarkupSafe==1.1.1
matplotlib==3.2.1
mccabe==0.6.1
menuinst==1.4.16
mistune==0.8.4
mkl-fft==1.0.15
mkl-random==1.1.0
mkl-service==2.3.0
mock==4.0.1
more-itertools==8.2.0
mpmath==1.1.0
msgpack==0.6.1
multipledispatch==0.6.0
multitasking==0.0.9
munch==2.5.0
mysql-connector-python==8.0.20
mysqlclient==2.0.1
navigator-updater==0.2.1
nbconvert==5.6.1
nbformat==5.0.4
networkx==2.4
nltk==3.4.5
nose==1.3.7
notebook==6.0.3
numba==0.48.0
numexpr==2.7.1
numpy==1.18.1
numpydoc==0.9.2
ogr==0.12.0
olefile==0.46
openpyxl==3.0.3
packaging==20.1
panda==0.3.1
pandas==1.0.3
pandas-datareader==0.9.0
pandocfilters==1.4.2
paramiko==2.7.1
parmap==1.5.2
parso==0.5.2
partd==1.1.0
path==13.1.0
pathlib2==2.3.5
pathspec==0.5.9
pathtools==0.1.2
patsy==0.5.1
pep8==1.7.1
pexpect==4.8.0
pickleshare==0.7.5
Pillow==7.0.0
pkginfo==1.5.0.1
pluggy==0.13.1
ply==3.11
prometheus-client==0.7.1
prompt-toolkit==3.0.3
psutil==5.6.7
psycopg2==2.8.5
py==1.8.1
pycodestyle==2.5.0
pycosat==0.6.3
pycparser==2.20
pycrypto==2.6.1
pycurl==7.43.0.5
pydocstyle==4.0.1
pyflakes==2.1.1
PyGithub==1.51
Pygments==2.5.2
PyJWT==1.7.1
pykrx==0.1.26
pylint==2.4.4
PyMySQL==0.9.3
PyNaCl==1.3.0
pyodbc===4.0.0-unsupported
pyOpenSSL==19.1.0
pyparsing==2.4.7
pypiwin32==223
pyreadline==2.1
pyrsistent==0.15.7
PySocks==1.7.1
pytest==5.3.5
pytest-arraydiff==0.3
pytest-astropy==0.8.0
pytest-astropy-header==0.1.2
pytest-doctestplus==0.5.0
pytest-openfiles==0.4.0
pytest-remotedata==0.3.2
python-dateutil==2.8.0
python-gitlab==2.2.0
python-jsonrpc-server==0.3.4
python-language-server==0.31.7
python-polylabel==0.6
pytz==2020.1
PyWavelets==1.1.1
pywin32==227
pywin32-ctypes==0.2.0
pywinpty==0.5.7
PyYAML==5.3.1
pyzmq==18.1.1
QDarkStyle==2.8
QtAwesome==0.6.1
qtconsole==4.6.0
QtPy==1.9.0
requests==2.20.1
requests-file==1.5.1
rope==0.16.0
Rtree==0.9.4
ruamel-yaml==0.15.87
scikit-image==0.16.2
scikit-learn==0.22.1
scipy==1.4.1
seaborn==0.10.0
semantic-version==2.5.0
Send2Trash==1.5.0
Shapely==1.7.0
simplegeneric==0.8.1
simplejson==3.17.2
singledispatch==3.4.0.3
six==1.11.0
smmap==3.0.4
snowballstemmer==2.0.0
sortedcollections==1.1.2
sortedcontainers==2.1.0
soupsieve==2.0.1
Sphinx==2.4.0
sphinxcontrib-applehelp==1.0.1
sphinxcontrib-devhelp==1.0.1
sphinxcontrib-htmlhelp==1.0.2
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.2
sphinxcontrib-serializinghtml==1.1.3
sphinxcontrib-websupport==1.2.0
spyder==4.0.1
spyder-kernels==1.8.1
SQLAlchemy==1.3.17
sqlparse==0.3.1
statsmodels==0.11.0
sympy==1.5.1
tables==3.6.1
tblib==1.6.0
termcolor==1.1.0
terminado==0.8.3
testpath==0.4.4
toolz==0.10.0
tornado==6.0.3
tqdm==4.42.1
traitlets==4.3.3
ujson==1.35
unicodecsv==0.14.1
urllib3==1.24.3
watchdog==0.10.2
wcwidth==0.1.8
webencodings==0.5.1
Werkzeug==1.0.1
widgetsnbextension==3.5.1
win-inet-pton==1.1.0
win-unicode-console==0.5
wincertstore==0.2
wrapt==1.11.2
xlrd==1.2.0
XlsxWriter==1.2.7
xlwings==0.17.1
xlwt==1.3.0
xmltodict==0.12.0
yahoo-finance==1.4.0
yahoofinancials==1.5
yapf==0.28.0
yfinance==0.1.54
zict==1.0.0
zipp==2.2.0
zope.interface==5.1.0
df = stock.get_market_ohlcv_by_ticker("20200831")
print(df.head(3))
Empty DataFrame
Columns: []
Index: []
stock.get_etf_ohlcv_by_date("20190401", "20190405", "295820")를 실행 시,
ERROR:root:'MKD60007' object has no attribute 'post'
Traceback (most recent call last):
File "C:\Users\godaa\anaconda3\lib\site-packages\pykrx\website\comm\util.py", line 7, in wrapper
return func(*args, **kwargs)
File "C:\Users\godaa\anaconda3\lib\site-packages\pykrx\website\krx\e3\etf\ticker.py", line 35, in __update_db
date = EtfTicker._get_closest_business_day()
File "C:\Users\godaa\anaconda3\lib\site-packages\pykrx\website\krx\e3\etf\ticker.py", line 52, in _get_closest_business_day
df = MKD60007().fetch(past.strftime("%Y%m%d"), now.strftime("%Y%m%d"), "KR7069500007")
File "C:\Users\godaa\anaconda3\lib\site-packages\pykrx\website\krx\e3\etf\core.py", line 71, in fetch
result = self.post(fromdate=fromdate, todate=todate, isu_cd=isin)
AttributeError: 'MKD60007' object has no attribute 'post'
ERROR:root:'NoneType' object has no attribute 'loc'
Traceback (most recent call last):
File "C:\Users\godaa\anaconda3\lib\site-packages\pykrx\website\comm\util.py", line 7, in wrapper
return func(*args, **kwargs)
File "C:\Users\godaa\anaconda3\lib\site-packages\pykrx\website\krx\e3\etf\wrap.py", line 22, in get_etf_ohlcv_by_date
isin = EtfTicker().get_isin(ticker)
File "C:\Users\godaa\anaconda3\lib\site-packages\pykrx\website\krx\e3\etf\ticker.py", line 46, in get_isin
return self.df.loc[ticker, 'isin']
AttributeError: 'NoneType' object has no attribute 'loc'
빈 파일을 반환하는 에러가 있습니다.
감사하게 사용하고 있어요~
다음 코드를 실행하면 상폐비율이 100%로 나옴
from pykrx import stock
df = stock.get_market_price_change_by_ticker("20000101", "20190717")
delist = df[ df['종가'] == 0 ]
print("상폐개수: {} / 상폐비율: {}".format(len(delist), len(delist)/len(df) * 100))
오류가 발생..
다시 anaconda를 지우고 다시 설치해도 마찬가지.
windows10 Enterprise
2020.07.03 Anaconda3-2020.02-Windows-x86-64 설치
python 3.7.6
stock.get_market_ticker_list()
stock.get_market_price_change_by_ticker("20200601","20200703")
stock.get_market_fundamental_by_ticker("20180305")
등에서 에러 발생..
stock.get_market_ohlcv_by_date("20200601","20200703","000020") -> 정상
즉 일부는 정상, 일부는 오류..
오류메시지는 JSONDecodeError 입니다. ^^
코스피/코스닥 시장에 중복된 이름이 존재해서 한글이름을 사용할 수 없음
예를 들어 화학
은 두 시장에 모두 존재함.
현재 버전에서 화학
을 넣으면 코스닥 시장의 화학 지수를 출력함.
안녕하세요, 우선 정말 좋은 라이브러리 만들어 주셔서 감사합니다.
README에서 stock.get_market_ohlcv_by_ticker 함수를 보면 특정 날짜에 맞추어서 전체 종목 데이터를 받고 있는 것으로 보이는데요, 그렇다면 이름이 stock.get_market_ohlcv_by_date_all 정도로 바뀌어야 하지 않을까요?
tickers = stock.get_market_ticker_list() 시 발생.
몇주전에는 정상 동작 했었는데..
다른 함수도 몇가지 동일한 오류.. ㅠㅠ
README에 따르면 (T+2)일자의 정보를 제공한다 하였으니 2영업일전일의 공매도 정보는 수집이 가능한걸로 이해하였는데요.
금일 테스트 도중 2영업일전의 공매도 잔고를 잘 가져오다가 자정 12시를 지난 시점부터 empty_dataframe이 나옵니다.
# 테스트한 시각 1/9 01:20
df = stock.get_shorting_status_by_date("20210106", "20210106", '005930')
print(df)
# 결과 :
Empty DataFrame
Columns: [공매도, 잔고, 공매도금액, 잔고금액]
Index: []
3영업일 전으로 설정하면 값이 나옵니다.
# 테스트한 시각 1/9 01:20
df = stock.get_shorting_status_by_date("20210105", "20210105", '005930')
print(df)
# 결과 :
공매도 잔고 공매도금액 잔고금액
날짜
2021-01-05 169 2676924 14011100 224593923600
자정을 넘어가는 시점에 오류가 발생할만한 코너케이스가 있는건지,
아니면 제가 사용법을 이해를 잘못 이해한 것인지 확인 부탁드립니다.
stock.get_market_cap_by_ticker("20200625") 을 실행하면,
에러 메세지로
'market 옵션이 올바르지 않습니다'를 반환합니다.
그래서 market 인자를 지정해준 경우,
stock.get_market_cap_by_ticker("20200625", market = "KOSPI")
마찬가지로 'market 옵션이 올바르지 않습니다'를 반환합니다.
해당 함수의 인자에 변화가 있었나요?
수정합니다.
market = 이 아니라 그냥 "KOSPI"를 입력하면 정상 작동됩니다.
Pycharm에서는 정상동작하지만 JupyterNoteBook에서 에러 메시지 출력
from pykrx import stock
df = stock.get_index_ohlcv_by_date("20200101", "20200831", "코스피")
print(df.head())
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key)
4373 return self._engine.get_value(s, k,
-> 4374 tz=getattr(series.dtype, 'tz', None))
4375 except KeyError as e1:
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine._get_loc_duplicates()
TypeError: '<' not supported between instances of 'str' and 'int'
During handling of the above exception, another exception occurred:
IndexError Traceback (most recent call last)
<ipython-input-6-62b157b95ab1> in <module>
----> 1 df = stock.get_index_ohlcv_by_date("20200101", "20200831", "코스피")
2 print(df.head())
~\Anaconda3\lib\site-packages\pykrx\stock\api.py in get_index_ohlcv_by_date(fromdate, todate, ticker, freq)
318 if isinstance(todate, datetime.datetime):
319 todate = _datetime2string(todate)
--> 320 return _get_index_ohlcv_by_date(fromdate, todate, ticker, freq)
321
322
~\Anaconda3\lib\site-packages\pykrx\stock\api.py in _get_index_ohlcv_by_date(fromdate, todate, ticker, freq)
306 """
307 id = krx.IndexTicker().get_id(ticker, fromdate)
--> 308 market = krx.IndexTicker().get_market(ticker, fromdate)
309 df = krx.get_index_ohlcv_by_date(fromdate, todate, id, market)
310 how = {'시가': 'first', '고가': 'max', '저가': 'min', '종가': 'last', '거래량': 'sum'}
~\Anaconda3\lib\site-packages\pykrx\website\krx\market\ticker.py in get_market(self, ticker, date)
160 self._download_ticker(date)
161 cond = self.df.index == ticker
--> 162 return self.df.loc[cond, 'ind_tp_cd'][0]
163
164 @staticmethod
~\Anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)
866 key = com.apply_if_callable(key, self)
867 try:
--> 868 result = self.index.get_value(self, key)
869
870 if not is_scalar(result):
~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key)
4392 # python 3
4393 if is_scalar(key): # pragma: no cover
-> 4394 raise IndexError(key)
4395 raise InvalidIndexError(key)
4396
IndexError: 0
Python 3.7.6
pykrx/stock/api.py 의 get_nearest_business_day_in_a_week 가 잘못된 날짜를 반환하는 것으로 보입니다.
내부에서 krx.get_index_ohlcv_by_date 함수를 호출하는데, 이 함수의 결과 데이터가 가장 최근의 날짜가 맨위에 나옵니다.
소스코드에서는 가장 아래의 날짜를 리턴하게 되어있습니다.
I have used e3 module to get ETF OHLCV.
but from version 0.1.8, e3 module deleted.
why?
is there any plan for update e3 module?
df = stock.get_exhaustion_rates_of_foreign_investment_by_ticker('20210118', "KOSPI")
실행하면 오류는 없으나, 결과가 18개만 나옵니다.
확인 해 주실 수 있을 까요?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.