본문 바로가기

컴퓨터 활용/구글스프레드시트 응용

국내 주가 정보 가져오기 - 에러 수정문제 @ 구글스프레드시트

주식 종목 정보 가져오기 - 네이버증권 실시간 / GAS 함수로 구현 @구글스프레드시트

​구글스프레드시트에서 단일 주식 종목의 주식 정보를 가져오는 함수 입니다. 네이버증권의 종목 메인 페...

blog.naver.com

전 종목 주가 시세 제공사이트가 변경이 심하고 해서 네이버로 개별 주가를 가져오도록 위와 같이 최종 변경 했었습니다. 하지만 전 종목 시세도 필요해서 다음 포스팅에서 서울경제의 전종목 시세로 최종변경 했었습니다.

 

국내 주가 가져오는 문제 해결 @구글스프레드시트로하는 국내 주식 수익률 관리

오늘 오후 부로 전종목 주가를 제공하고 있던 다음의 finance-service.daum.net 이 없어졌습니다. 다음(Da...

blog.naver.com

며칠 전 부터 페이지를 가져오는데 에러가 생겼다는 메시지가 나와 원인을 찾던 중에 서버 과부하로 페이지를 가지 오지 못하는 현상이 발생하는 것 같습니다.

그래서 좀더 빨리 데이터를 찾도록 XPath 수식을 변경했습니다.

전의 수식은 //dl[@class='tbody']/dt 이었는데 페이지를 파싱하는데 이것을

//html/body/div/div/div/div/div[@id='divStockSeach_M']/dl[@class='tbody']/dt 로 변경 했습니다.

body 태그로 부터 하위로 순차적으로 찾아내려가서 데이터를 가져오는 방식입니다.

 

 

 

적용한 함수는 다음과 같습니다.

★→  종목명
=IMPORTXML(
   "https://www.sedaily.com/Stock/Quote/Search?code=&text=",
    "//html/body/div/div/div/div/div[@id='divStockSeach_M']/dl[@class='tbody']/dt"
) 

★ → 현재가 , 전일비 , 임시 등락률
=IMPORTXML(
    "https://www.sedaily.com/Stock/Quote/Search?code=&text=",
    "//html/body/div/div/div/div/div[@id='divStockSeach_M']/dl[@class='tbody']/dd"
) → 현재가 , 전일비 , 임시 등락률

★ 종목코드
=ARRAYFORMULA(
 REGEXEXTRACT(
  IMPORTXML("https://www.sedaily.com/Stock/Quote/Search?code=&text=&pageCount=",
    "//html/body/div/div/div/div/div[@id='divStockSeach_M']/dl[@class='tbody']/dt/a/@href"),
    "[0-9A-Z]{6}"
  )
)

=REGEXEXTRACT(E2,"[0-9A-Z]{6}")
→ 6자리 종목 코드만 빼내는 명령 
※ ARRAYFORMULA 함수는 배열 수식 함수로 - 특정 함수를 모든 행에 실시간 적용함
★ 시장구분
=ARRAYFORMULA(
 IF(
  IMPORTXML("https://www.sedaily.com/Stock/Quote/Search?code=&text=&pageCount=",
  "//html/body/div/div/div/div/div[@id='divStockSeach_M']/dl[@class='tbody']/dt/@class")="ico_kospi",
  "코스피",
  "코스닥"
  )
) 

★ 등락률
=ARRAYFORMULA( 
  IF(ISTEXT(INDIRECT("D2:D"&J1)), -- 텍스트이면 
    REGEXREPLACE(INDIRECT("D2:D"&J1),"[%]","")/100, -- %를 제거해서 숫자로 만들고 
    D2:INDIRECT("D"&J1) -- 아니면 그대로 적용 
  )
)
※ INDIRECT 함수는 문자를 수식으로 만들어 주는 함수입니다. ( MS엑셀과 동일)

 
최종 해결 사항

페이지는 정상인데 서버에 접속이 에러가 나서 그런 것이므로 구글 앱스크립트로 해결 했습니다.

 

https://docs.google.com/spreadsheets/d/10xaMfpriT6G1d4hw94L6q_ozT0fogilVYb-S2dtw8-8/edit?usp=sharing