StockListing 함수 직접 만들기 (22년 1월 이후 FinanceDataReader의 StockListing 함수 결과값이 달라짐) 강의편에서 크롤링 함수 오류가 납니다.
465
1 asked
알려주신대로,
def StockListing() :
import requests
import pandas as pd
import json
try :
from pandas import json_normalize
except importError:
from pandas.io.json import json_normalize
data = {'bld':'dbms/comm/finder/finder_stkisu', 'locale':'ko_KR',}
r = requests.post('http://data.krx.co.kr/comm/bldAttendant/getjsondata.cmd', data=data)
jo = json.loads(r.text)
df = json_normalize(jo,'block1')
df_info = df[['short_code', 'codeName']]
df_info.columns = ['Symbol','Name']
return df_info
df = StockListing()
JSONDecodeError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_3876\2969629370.py in <module>
19 df_info.columns = ['Symbol','Name']
20 return df_info
---> 21 df = StockListing()
~\AppData\Local\Temp\ipykernel_3876\2969629370.py in StockListing()
13
14 r = requests.post('http://data.krx.co.kr/comm/bldAttendant/getjsondata.cmd', data=data)
---> 15 jo = json.loads(r.text)
16 df = json_normalize(jo,'block1')
17 df_info = df[['short_code', 'codeName']]
~\anaconda3\lib\json\__init__.py in loads(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
344 parse_int is None and parse_float is None and
345 parse_constant is None and object_pairs_hook is None and not kw):
--> 346 return _default_decoder.decode(s)
347 if cls is None:
348 cls = JSONDecoder
~\anaconda3\lib\json\decoder.py in decode(self, s, _w)
335
336 """
--> 337 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
338 end = _w(s, end).end()
339 if end != len(s):
~\anaconda3\lib\json\decoder.py in raw_decode(self, s, idx)
353 obj, end = self.scan_once(s, idx)
354 except StopIteration as err:
--> 355 raise JSONDecodeError("Expecting value", s, err.value) from None
356 return obj, end
JSONDecodeError: Expecting value: line 16 column 3 (char 36)이런 오류가 나는데, 어떻게 해결해야 할까요?
Answer 1
0
이 오류는 fdr.StockListing('KRX') 호출 시 KRX 마켓 데이터를 가져오기 위해 요청한 URL 응답이 JSON 형식이 아닌 빈 응답 혹은 HTML이라서 json.loads()가 실패해서 발생하는 문제입니다.
❗ 핵심 원인
FinanceDataReader 내부에서 사용하는 KRX 사이트가 최근 변경되었거나, 크롤링 방지/접근 차단(403, 200 HTML)이 걸린 경우입니다.
특히
fdr 0.9.50이후부터KRX관련 API가 자주 깨지는 현상이 발생하고 있습니다.
✅ 해결 방법 1: fdr 최신 버전으로 업그레이드
먼저 최신 버전인지 확인하세요:
pip install -U finance-datareader
현재 기준 최신 안정 버전은 0.9.81입니다.
확인:
import FinanceDataReader as fdr
print(fdr.__version__)
그럼에도 여전히 fdr.StockListing('KRX')에서 오류가 나면 다음 방법으로 우회해야 합니다.
✅ 해결 방법 2: 수동으로 KRX 상장기업 목록 가져오기 (우회)
KRX에서 직접 CSV로 받거나 GitHub에 있는 미러 데이터를 사용:
import pandas as pd
# KRX 상장 기업 목록 (코자존이 올려둔 GitHub 백업 데이터)
df_krx = pd.read_csv("https://raw.githubusercontent.com/corazzon/finance-data-analysis/main/krx.csv")
# 확인
print(df_krx.head())
이 방법은 실시간은 아니지만, 실제 fdr 내부에서도 옛날엔 이 파일을 기반으로 했습니다.
✅ 해결 방법 3: KRX Open API 직접 호출 (고급)
KRX의 공식 데이터를 직접 요청하려면 다음과 같은 POST 요청을 구성해야 합니다.
(예전엔 fdr가 이걸 대신해줬지만, 요즘 잘 안됩니다)
예:https://data.krx.co.kr/contents/MDC/MDI/mdiLoader에 적절한 payload로 요청
하지만 이건 header, session, params 다 맞춰야 해서 꽤 번거롭습니다.
🔚 결론
FinanceDataReader.StockListing('KRX')는 종종 깨짐 (KRX 사이트 변경 때문)임시 해결: fdr 최신화 또는 CSV 백업본 사용
장기적 해결: 별도 크롤러 구현 필요 (공식 API 쓰기)
필요하시면 최신 KRX 상장사 목록을 CSV로 직접 내려드릴 수도 있습니다. 원하시나요?
이거라도 ...
26-1년도 이론문제 재탕
0
3
1
26-1년도 코드문제 재탕
0
1
0
계좌잔고 조회하기
0
5
0
안녕하세요 강사님
0
7
1
[시험 준비] AICE Associate 단기간 합격을 위한 모의고사 활용 방법 문의
1
10
1
이론재탕만 눈치챘어도
0
16
1
25-3년도 이론문제 재탕
0
12
1
25-3년도 코드문제 재탕
0
11
0
출력값 문의
0
12
2
인코딩을 다 꼭 해봐야하는지
0
9
1
LLM 시대에서 머신러닝 개념 이해 필요성 문의
0
13
0
25-2 분기커버리지
0
18
0
25-2 이론 재탕
0
24
1
25-1 이론 재탕
0
24
1
강의 잘보고 있습니다. 강의 파일을 어디서 찾아야 되는지 몰라서 여쭤 봅니다.
0
19
1
서브넷 마스크
0
32
1
모의고사 1회 계산문제 2개 맞았는데
0
51
2
기존 미국주식 자동매매 프로그램과 같은 AWS 서버에서 돌리려고 할때
1
37
1
안녕하세요? 강사님 질문있습니다.(인코딩관련)
0
51
2
강의자료 문의
0
44
1
MACD & 오실레이터 with EXCEL 강의 데이터 문의
0
215
1
nbextension 없이는 안되나요?
0
1665
1
StockListing 함수 오류
1
517
1
part 2 강의
0
324
1

