반응형
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 방식으로 요청시 입력해야 하는 정보가 나옵니다.
(2023년에 다시 해보니 아래처럼 탭이 생겼다.)
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()
반응형
'R 주제 > 크롤링' 카테고리의 다른 글
[R 크롤링] 12. 코스피, 코스닥, 코넥스 목록 따로 가져오기 (0) | 2021.04.07 |
---|---|
[R 크롤링] 10. R크롤링 함수 모음 (2) | 2021.04.07 |
[R 크롤링] 9. GET 방식과 POST 방식의 차이 (0) | 2021.03.24 |
[R 크롤링] 8. 웹브라우저의 원리 간단 설명 (0) | 2021.03.24 |
[R 크롤링] 7. 멜론차트에서 가수 이름도 출력 (2) | 2021.03.24 |
댓글