-
[데이터수집] 한국거래소 정보 가져오기Python/텔레그램봇:채권모니터링 2020. 12. 2. 17:47
한국거래소 시장정보 페이지를 보면 가격이나 거래량 등의 정보가 있다.
시장정보
marketdata.krx.co.kr
내가 하고 싶은 건 채권 거래 현황 확인. 매수/매도 호가 및 거래량까지 확인할 수 있다. (20분 전까지의 정보만 제공한다)
API를 찾아봤지만 확인할 수 없어서 request 방식으로 가져오기로 했다.
다만 페이지가 자바스크립트로 이루어져 있고, 데이터를 조회하려면 약간의 클릭이 필요해서,
일반적인 requests.get 방식으로는 안 가져와진다.
개발자도구 쪽에서 소스보기 및 네트워크 보기 페이지를 뜯어본 결과
GenerateOTP에 쿼리 전송 후 OTP 요청 -> 해당 OTP를 download 쿼리의 Form data에 포함해서 전송하는 방식으로 되어있다.
실제 데이터는 download.jspx에 보낸 post 요청에 response로 들어온다.
파이썬을 활용해 과거 KOSPI200 구성종목 가져오기
오랜만에 코딩글입니다.DIY 백테스트를 하려면 우선 유니버스 구성이 중요한데요.개인 투자자들 주식 유...
blog.naver.com
위 블로그를 참고해서
GET GenerateOTP
otp_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0', 'Referer': 'http://marketdata.krx.co.kr/contents/MKD/05/0502/05020201/MKD05020201.jsp' } get_req_url = 'http://marketdata.krx.co.kr/contents/COM/GenerateOTP.jspx?name=fileDown&filetype=csv&url=MKD/05/0502/05020201/mkd05020201&bnd_clss_cd=on&mult_byinst_credit_valu_grd=on&remain_pd=on&sort_methd_tp_cd=O&pagePath=%2Fcontents%2FMKD%2F05%2F0502%2F05020201%2FMKD05020201.jsp=' otp = requests.get(url=get_req_url, headers=otp_headers) print(otp.content) # 바이너리 타입으로 OTP 정보가 들어온다
get_req_url은 개발자도구 Network에서 GenerateOTP 파일의 url을 확인해서 얻었다. (블로그처럼 param으로 넘겨도 된다)
opt_headers의 정보도 GenerateOTP의 헤더를 찾아보면 확인할 수 있다.
한국거래소에서 채권 정보의 넘버링을 MKD05020201으로 해서 경로가 이렇다.
참조한 블로그에서는 주식 정보를 확인했기 때문에 참조주소가 다르다.
이제 OTP를 얻었으니 POST 쿼리를 보내면 된다.
post_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0', 'Referer': 'http://marketdata.krx.co.kr/' } form_data = { 'code': otp.content # 위에서 획득한 OTP를 여기 넣어주자 } _url = 'http://file.krx.co.kr/download.jspx' data = requests.get(_url, form_data, headers=post_headers).content.decode('utf-8') # content는 바이너리로 들어오기 때문에 utf8 인코딩을 해줘야한다 # 텍스트 데이터기 때문에 .content.decode('utf-8') 대신 .text를 써도 된다
위의 _url도 개발자도구 Network 탭의 post header에서 Host + Filename으로 얻었다.
데이터를 확인해보니 직접 csv파일을 다운받은 것과 동일한 결과가 나온다.
'Python > 텔레그램봇:채권모니터링' 카테고리의 다른 글
[python f'{formating}'] 봇 메시지 포맷팅 (0) 2020.12.16 [Pandas] 데이터 정리 (2) 필터링(query) 및 정렬 (0) 2020.12.15 [Pandas] 데이터 정리 (1) read_csv(na_values) & apply (0) 2020.12.15 [ECOS API] 한국은행 경제통계 API 이용 (2) json (0) 2020.12.14 [ECOS API] 한국은행 경제통계 API 이용 (1) xml (0) 2020.12.10