본문 바로가기
R 주제/크롤링

[도구 R로 하는 크롤링] 11. 한국거래소에서 전체 상장종목 목록 가져오기(어려운 버전)

by 만다린망고 2021. 4. 7.
반응형

Step1. 홈페이지 접속하기

한국거래소 홈페이지에 들어갑니다. 

 

http://www.krx.co.kr/main/main.jsp

 

상단 탭의 [정보데이터시스템]을 클릭합니다. 

 

 

정보데이터시스템 화면에서 좌측 탭의 [종목정보]-[전종목 기본정보]를 클릭합니다. 

 

 

 

Step2. 네트워크 정보 확인

우클릭 [검사]를 클릭합니다. Network 탭을 클릭합니다. 

 

 

다운로드 버튼을 클릭하고 CSV를 다운받습니다. 

 

 

네트워크 탭에 아래 두 파일이 생깁니다.

 

generate.cmd : OTP 생성

download.cmd : 생성한 OTP를 제출하고 파일을 다운로드함. 

 

 

 

Step3. OTP 받아오기

먼저 OTP를 받아옵시다. GenerateOTP를 눌러보면, 우측에 Request URL 이 있을 것입니다.

 

 

POST 방식입니다. 스크롤을 내려보면 POST 방식으로 요청시 입력해야 하는 정보가 나옵니다. 

 

 

R스튜디오에 아래와 같이 입력합니다. 

 

library(httr)
library(rvest)
library(readr)

otp_url =
  'http://data.krx.co.kr/comm/fileDn/GenerateOTP/generate.cmd'
otp_form_data = list(
  mktId = 'ALL',
  share = '1',
  csvxls_isNo = 'false',
  name = 'fileDown',
  url = 'dbms/MDC/STAT/standard/MDCSTAT01901'
)

otp = POST(otp_url, query = otp_form_data) %>% read_html() %>% html_text()

otp 가 잘 생성됐는지 확인합니다.

 

> otp
[1] "g7v9PTcdyNquxGsKe4/cpWd04Eph1cO/YIWb/XiXr0URtSksuLS7Bnxpl86F7dAOvXfGx9S2U5wgvoxsacATRRtmGtORI4WrGDmruVe6oXtCqUypoW0Lp6SAPP0PhVkgThCTcjIZNPI5lCTubZnhjio6AHXdxc45YVEhz4JdugHPMxvIwHadpQpCGE1HxZAXvTCprTIXuXT9XxFb88awpQ=="

 

Step4. CSV 자료 요청하기

네트워크 탭에서 download.cmd 를 클릭합니다. 

 

 

스크롤을 내려보면 Form Data 가 있습니다. 이 값이 otp 입니다. 위에서 생성한 otp와 같다는 것을 알 수 있습니다. 

 

 

POST 방식으로 아래와 같이 요청합니다. 

 

csv_url = 'http://data.krx.co.kr/comm/fileDn/download_csv/download.cmd'
csv_form_data = POST(csv_url, query = list(code = otp)) %>% 
  read_html(encoding = 'EUC-KR') %>% html_text() %>% read_csv()

 

크롤링이 잘 됐는지 확인합니다. 

 

> head(data)
# A tibble: 6 x 12
  표준코드 단축코드 `한글 종목명` `한글 종목약명` `영문 종목명` 상장일     시장구분 증권구분 소속부
  <chr>    <chr>    <chr>         <chr>           <chr>         <date>     <chr>    <chr>    <chr> 
1 KR70981~ 098120   (주)마이크로컨텍솔루션~ 마이크로컨텍솔  Micro Contac~ 2008-09-23 KOSDAQ   주권     벤처기업부~
2 KR71311~ 131100   (주)스카이이앤엠~ 스카이이앤엠    SKY E&M Co.,~ 2011-06-14 KOSDAQ   주권     투자주의환~
3 KR70095~ 009520   (주)포스코엠텍~ 포스코엠텍      POSCO M-TECH~ 1997-11-10 KOSDAQ   주권     우량기업부~
4 KR70955~ 095570   AJ네트웍스보통주~ AJ네트웍스      AJ Networks ~ 2015-08-21 KOSPI    주권     NA    
5 KR70068~ 006840   AK홀딩스보통주~ AK홀딩스        AK Holdings,~ 1999-08-11 KOSPI    주권     NA    
6 KR72823~ 282330   BGF리테일보통주~ BGF리테일       BGF Retail    2017-12-08 KOSPI    주권     NA    
# ... with 3 more variables: 주식종류 <chr>, 액면가 <chr>, 상장주식수 <dbl>

 

 

전체코드 모아보기

library(httr)
library(rvest)
library(readr)

otp_url =
  'http://data.krx.co.kr/comm/fileDn/GenerateOTP/generate.cmd'
otp_form_data = list(
  mktId = 'ALL',
  share = '1',
  csvxls_isNo = 'false',
  name = 'fileDown',
  url = 'dbms/MDC/STAT/standard/MDCSTAT01901'
)

otp = POST(otp_url, query = otp_form_data) %>% read_html() %>% html_text()


csv_url = 'http://data.krx.co.kr/comm/fileDn/download_csv/download.cmd'
data = POST(csv_url, query = list(code = otp)) %>% 
  read_html(encoding = 'EUC-KR') %>% html_text() %>% read_csv() 
반응형

댓글0