hyunyulhenry / quant_py

파이썬을 이용한 퀀트 투자 포트폴리오 만들기
169 stars 88 forks source link

10장 한국거래소 업종분류 현황 및 개별지표 크롤링 오류 #51

Open NureongKim opened 1 month ago

NureongKim commented 1 month ago

안녕하세요, 헨리의 퀀트대학 유튜브 강의와 파이썬을 이용한 퀀트 투자 포트폴리오 만들기 교재 잘 보고 있습니다. 해당 교재 10장 공부 중에 KRX 정보데이터시스템 홈페이지에서 한국거래소 업종분류 현황 및 개별지표를 크롤링 하는 부분에 오류가 있어 문의드립니다.

########OTP 받아오는 과정 import requests as rq from io import BytesIO import pandas as pd

gen_otp_url = 'http://data.krx.co.kr/comm/fileDn/GenerateOTP/generate.cmd' # generate.cmd의 Request URL

#########Payload 탭 정보 gen_otp_stk = { 'mktId': 'STK', 'trdDd': biz_day, # 아까 추출한 최근 영업일로 날짜 설정 'money': '1', 'csvxls_isNo': 'false', 'name': 'fileDown', 'url': 'dbms/MDC/STAT/standard/MDCSTAT03901' } headers = {'Referer':'http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?'} # 우리가 거쳐온 흔적. Headers 부분 아래의 Referer otp_stk = rq.post(gen_otp_url, gen_otp_stk, headers = headers).text

print(otp_stk)

위와 같은 교재 코드를 실행하면 아래와 같은 오류가 나오면서 데이터가 올바르게 수집되지 않는 것을 볼 수 있고 개별종목 또한 마찬가지의 결과가 나옵니다. 어떻게 해결해야 하는지 여쭙고 싶습니다.

    <html>
Error - KRX | Market Data System

Service unavailable The service is not smooth due to temporary access instability.
If you have any questions about this, please contact system manager.

kimhankyeol commented 1 month ago

headers = {'Referer':'http://data.krx.co.kr/contents/MDC/MDI/mdiLoader','Upgrade-Insecure-Requests': '1','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'} 헤더 부분에 2개 추가 해주시고 User-Agent 부분은 generate.cmd 에서 참고해서 바꿔주세요. 그러면 정상조회 됩니다.

ys16064 commented 1 month ago

답변 감사합니다. 저도 질의자와 같은 문제가 있는데요. 조금 더 자세히 설명 가능하실지요?

헤더부분에 2개 추가하라는 말씀이... ? 헤더부분은 아래와 같이 대체 하라는 말씀인지요?

"headers = {'Referer':'http://data.krx.co.kr/contents/MDC/MDI/mdiLoader','Upgrade-Insecure-Requests': '1','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'}"

감사합니다.

NureongKim commented 1 month ago

네 말씀주신 형태로 headers에 입력하니 코드가 원활하게 실행되었습니다.

ys16064 commented 1 month ago

감사합니다. 저도 예전처럼 잘 실행되었습니다.

근데, 원래 "headers = {'Referer':'[http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?'}

에서 "headers = {'Referer':'http://data.krx.co.kr/contents/MDC/MDI/mdiLoader','Upgrade-Insecure-Requests': '1','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'}"

으로 바꾸는 것은 왜 그런가요?

단순히, 해당사이트의 generated.cmd가 변경되서 바꿔줘야 하는 것인가요?