최신영업일 가져오기

해당사이트 에서 방법을 가져와서 정리한 것

네이버금융의 최신영업일 가져오는 것을 해보겠다. 저번시간엔 httrGET, POST 방법으로 html 데이터를 가져온 뒤, rvest 로 필요한 데이터를 가져왔다. 이번에는 Xpath 를 이용하여 가져와보자.

이전과 같이 2가지 패키지를 불러온다. 크롬에서 복사한 xpath 를 직접 넣어주면 된다.

library(httr)
library(rvest)

url='https://finance.naver.com/sise/sise_deposit.nhn'

biz_day = GET(url) %>% 
  read_html(encoding = 'EUC-KR') %>% 
  html_nodes(xpath=
               '//*[@id="type_0"]/div/ul[2]/li/span') %>% 
  html_text()

print(biz_day)
## [1] "<U+00A0><U+00A0>|<U+00A0><U+00A0>2019.09.04"

우리가 원하는 형태로 date = '20190807' 변경하기 위하여, stringr 패키지를 설치 후 불러온다.

library(stringr) #문자패턴을 수정
biz_day = biz_day %>% 
  str_match(('[0-9]+.[0-9]+.[0-9]+') ) %>%
  str_replace_all('\\.', '')
print(biz_day)
## [1] "20190904"

복습도 할겸, 앞에 배웠던 종목코드 가져오기biz_day 를 넣어보자.

# 1. OTP 발급
gen_otp_url <- 'http://marketdata.krx.co.kr/contents/COM/GenerateOTP.jspx'
gen_otp_data<-
  POST(gen_otp_url,
       query= list(
        name = 'fileDown',
        filetype = 'csv',
        url = 'MKD/03/0303/03030103/mkd03030103',
        tp_cd = 'ALL',
        date = biz_day,
        lang = 'ko',
        pagePath = '/contents/MKD/03/0303/03030103/MKD03030103.jsp'))
# httr::POST 를 활용하여 otp 가 있는 html 데이터 가져오기

otp <- gen_otp_data %>% 
  read_html() %>% 
  html_text()
# rvest 의 함수를 이용하여 필요한 otp 값 불러오기

# 2. POST 로 다운로드
library(readr) # read_csv() 함수를 위한 패키지
down_url <- 'http://file.krx.co.kr/download.jspx'
down_sector <- POST(down_url, query = list(code = otp),
                   add_headers(referer = gen_otp_url)) %>%
                   read_html() %>%
                   html_text() %>%
                   read_csv()

down_sector = down_sector[order(down_sector$`시가총액(원)`,decreasing=TRUE),] #시가 총액순서로 정렬

print(head(down_sector))
## # A tibble: 6 x 7
##   시장구분 종목코드 종목명  산업분류 `현재가(종가)` 전일대비 `시가총액(원)`
##   <chr>    <chr>    <chr>   <chr>             <dbl>    <dbl>          <dbl>
## 1 코스피   005930   삼성전자~ 전기전자          44100      850        2.63e14
## 2 코스피   000660   SK하이닉스~ 전기전자          80000     3000        5.82e13
## 3 코스피   005935   삼성전자우~ 전기전자          36700      500        3.02e13
## 4 코스피   005380   현대차  운수장비         128500        0        2.75e13
## 5 코스피   035420   NAVER   서비스업         151000      500        2.49e13
## 6 코스피   012330   현대모비스~ 운수장비         250500     1500        2.39e13
write.csv(down_sector, 'data/krx_sector.csv')