자동화/Google Spreadsheet

[Google 스프레드시트] 복수의 종목의 현재가를 한번에 불러오는 방법

누군가의진심 2023. 8. 19. 23:07

지난 포스트에서는 단일 종목의 현재가를 네이버 금융에 있는 데이터를 이용하여 구글 스프레드 시트에 불러오는 방법을 다루어 보았다. 이번에는 다수 종목의 현재가를 한번에 불러오는 방법을 설명해보겠다. 이걸 두가지 함수로 다루어 보자.

  1. Googlefinance
  2. Importxml

가장 먼저 구글스프레드 시트에 아래와 같은 표를 만들어 보자. 시장 종류 및 종목코드, 종목명은 본인이 원하는 것으로 바꾸면 된다. 

시장 종류 종목코드 종목명
KOSDAQ 294630 서남
KRX 004830 덕성
KRX 005930 삼성전자
KOSDAQ 383310 에코프로에이치엔

종목 코드 및 종목명은 일일히 찾아서 넣는 방법도 있고, 국내 종목의 경우에는 KRX 사이트에 접속하여 일괄 다운 받는 방법도 있다. (통계 - KRX | 정보데이터시스템)

 

위 표에서 시장 종류를 넣는 이유는 googlefinance 함수 때문이다. 

googlefinance 는 다양한 주식 시장을 다루기 때문에 종목코드만 입력하게 되면 자칫 에러가 발생할 수 있다. 동일한 종목 코드가 다른 시장에 존재할 수 있기 때문이다. 따라서 googlefinance 함수를 사용할 때는 해당 종목이 어느 시장에 있는지 명확히 지정해 주는 것이 바람직하다. googlefinance 함수의 설명서에도 시장을 기재할 것을 권장하고 있다. 형식은 "시장:종목코드" (예: KOSDAQ:294630) 이다. 

 

삼성전자나 덕성과 같은 경우에는 종목코드가 0으로 시작한다. 스프레드시트는 이를 자동으로 숫자로 인식하며 4830, 혹은 5930과 같이 처리하고, 종목코드 앞의 0을 자동으로 삭제한다. 따라서 이런 숫자 형식의 데이터를 사용하게 되면 오류가 발생할 수 있으므로 종목코드 열은 형식을 문자로 바꾸어준다. 아래 캡쳐와 같이 형식을 문자(Plain text)로 바꿔주거나, 종목코드 맨 앞에 작은따옴표 ' 를 붙인다. (예: '004830)

준비는 끝났다. 

이제 구체적으로 함수를 사용하여 현재가를 구해보자. 


1. Googlefinance 에서 제공하는 현재가를 googlefinance 함수를 이용해 불러오는 방법

googlefinance 함수의 기본 구조는 다음과 같다. 

GOOGLEFINANCE(ticker, [attribute], [start_date], [end_date|num_days], [interval])

이번 포스트의 주제 상 우리는 '현재가'가 관심 사항이므로 필요한 정보는 티커, Attribute 는 price 이다. 

GOOGLEFINANCE(ticker, "Price") 

티커의 경우에는 위에서 언급한 바와 같이 KOSDAQ:294630 과 같은 형태로 입력이 되어야 한다. 따라서 우리는 아까 만든 데이터 표에서 시장종류와 종목코드를 합치고, 시장종류와 종목코드의 사이에는 콜론(:) 의 구분자가 들어간 데이터를 새로 만들어야 한다. 두개의 값을 합치는 방법은 여러 방법이 있겠지만, & 를 이용하는 것과 Textjoin 함수를 사용하는 법이 있다. 입력되는 함수 형태를 보여주기 위해 D열에 기재해 두었고, 결과값은 E열에 나오게 해보았다. 그리고 마지막으로 E열의 값을 이용하여 Googlefinance 함수에 현재가를 출력해본다.

 

이 함수는 각 종목별로 한땀한땀 넣을 필요가 없다. 하나의 열만 함수를 기재하고 나머지 열은 자동채우기를 하면된다. 

 

그리고 여기에 몇가지 함수를 더해주면 최근의 주가 추세도 나타낼 수 있다. (24.06.29 추가 -  2024.06.29 - [자동화] - Google 스프레드시트에서 Sparkline과 GOOGLEFINANCE 함수를 활용하여 주가 추세를 표현하는 방법)

Sparkline 을 그려 최근의 추세를 확인할 수 있다. 이제 와서 보니 삼성은 저 당시가 바닥이었다.

2. 네이버 금융에서 제공하는 현재가를 importxml 함수를 이용해 불러오는 방법

importxml 함수의 기본 구조는 다음과 같다. 

IMPORTXML(url, xpath_query, locale)

우리에게 필요한 정보는 url와 xpath_query 이다.

네이버 시세주소의 url 를 자세히 보면  'https://finance.naver.com/item/sise.naver?code=' 와 종목코드가 결합되어 있다는 것을 알 수 있다. 따라서 우리는 기본 시세 창의 주소와 종목코드를 합친 값을 만든다. 방법은 위에 언급한 것과 동일하며, 그 예시는 아래와 같다. 마지막으로 xpath 를 찾아 import 함수로 에 넣는다 역시 하나의 열만 함수를 기재하고 나머지 열은 자동채우기를 하면 된다. 


위와 같은 방법으로 수십가지의 종목을 한번에 불러 올 수 있다. 다만, 네이버 금융에서 importxml 로 대량의 데이터를 자주 불러오면 차단된다는 이야기가 있고, 실제로도 속도가 매우 느려지는 것을 확인할 수 있다. 

 

끝.

반응형