-
[데이터수집] 한국거래소 정보 가져오기Python/텔레그램봇:채권모니터링 2020. 12. 2. 17:47
한국거래소 시장정보 페이지를 보면 가격이나 거래량 등의 정보가 있다.
내가 하고 싶은 건 채권 거래 현황 확인. 매수/매도 호가 및 거래량까지 확인할 수 있다. (20분 전까지의 정보만 제공한다)
API를 찾아봤지만 확인할 수 없어서 request 방식으로 가져오기로 했다.
다만 페이지가 자바스크립트로 이루어져 있고, 데이터를 조회하려면 약간의 클릭이 필요해서,
일반적인 requests.get 방식으로는 안 가져와진다.
개발자도구 쪽에서 소스보기 및 네트워크 보기 페이지를 뜯어본 결과
GenerateOTP에 쿼리 전송 후 OTP 요청 -> 해당 OTP를 download 쿼리의 Form data에 포함해서 전송하는 방식으로 되어있다.
실제 데이터는 download.jspx에 보낸 post 요청에 response로 들어온다.
위 블로그를 참고해서
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