앞서 한국거래소의 업종 분류 현황을 크롤링하는 방법에 대해서 알아보았습니다. 이번에는 한국거래소의 개별종목 지표 크롤링하는 방법에 대해서 알아보겠습니다.
- KRX 정보데이터시스템 http://data.krx.co.kr/ 에서 [기본통계 → 주식 → 세부안내] 부분
- [12021] PER/PBR/배당수익률(개별종목): http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020502
개별종목 데이터를 크롤링하는 방법은 앞서 살펴본 방법과 매우 유사하며, 요청하는 쿼리 값에만 차이가 있습니다.
이번에도 역시 사이트에서 CSV파일을 다운로드 받은 후, generate.cmd를 클릭하여 Payload를 확인합니다.
여기서 'tboxisuCd_finder_stkisu0_6', 'isu_Cd', 'isu_Cd2' 등의 항목은 조회 구분의 개별추이 탭에 해당하는 부분이므로 우리가 원하는 전체 데이터를 받을 때는 필요하지 않는 값입니다. 이를 제외하여 요청값을 Request URL에 제출하고, 받은 OTP 코드를 다시 download.cmd의 Requeat URL에 제출하면 해당 데이터 역시 쉽게 다운로드 할 수 있습니다.
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'
gen_otp_ksq = {
'searchType': '1',
'mktId': 'ALL',
'trdDd': biz_day,
'csvxls_isNo': 'false',
'name': 'fileDown',
'url': 'dbms/MDC/STAT/standard/MDCSTAT03501'
}
headers = {'Referer': 'http://data.krx.co.kr/contents/MDC/MDI/mdiLoader',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'}
otp = rq.post(gen_otp_url, gen_otp_ksq, headers=headers).text
down_url = 'http://data.krx.co.kr/comm/fileDn/download_csv/download.cmd'
krx_ind = rq.post(down_url, {'code': otp}, headers=headers)
krx_ind = pd.read_csv(BytesIO(krx_ind.content), encoding = 'EUC-KR')
krx_ind['종목명'] = krx_ind['종목명'].str.strip()
krx_ind['기준일'] = biz_day
krx_ind.head()
다음편
'데이터분석 > 크롤링' 카테고리의 다른 글
파이썬 퀀트투자(6): 네이버금융 수정주가 크롤링, 적재 (4) | 2024.10.12 |
---|---|
파이썬 퀀트투자(5): WICS 기준 섹터정보 크롤링, 적재 (2) | 2024.10.12 |
파이썬 퀀트투자(2): 한국거래소 업종 분류 현황 크롤링 (1) | 2024.10.09 |
파이썬 퀀트투자(1): 최근 영업일 기준 데이터 크롤링 (7) | 2024.10.09 |
BeautifulSoup을 이용한 정적 크롤링 개념 정리 및 실습 (0) | 2024.03.15 |
댓글