본문 바로가기

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

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



오늘 오후 부로 전종목 주가를 제공하고 있던 다음의 finance-service.daum.net 이 없어졌습니다.
다음(Daum)이 제공하던 전 종목 주가 제공 페이지 이용하여 엑셀/구글스프레드시트로 자신의 주식을 관리하고 계셨던 수 많은 분들을 난감하게 했을 것 같네요.


제가 서울경제 홈페이지의 전종목 시세로 주가를 가져오는 하는 방법을 알아 냈습니다. 
※이데일리는 미리 작성한 터라 ETF 를 지원하지 않아서 어떻게 돌아 가는지 이해만 하시고 서울경제 것을 사용하시기 바랍니다.

AJAX 라고 하는 새로운 웹 기술을 적용을 해서 페이지 전체를 가져오지 않고 필요한 데이터만 가져와서
웹 페이지에 뿌리는 방식인데요. 이런 경우 가져오는 방법은 파이썬(Python)의 다른 프로그램을 이용할 수 밖에 없습니다.

제가 개인적으로 만들어서 쓰고 있는 구글 스프레드시트로 하는 국내주식 관리에서도 다음에서 제공하고 있는 전 종목 시세를 이용하고 있었는데요. 언젠가 없어질 거라고 예상을 해서 이중화를 미리미리 해두고 있었습니다.



문제는 우선주같은 종목코드의 뒷 자리가 M이나 K로 끝나는 주식들인데요. 이런건 구글 파이낸스에서 제공을 안하고 있습니다.

그래서 금일 부랴부랴 하루종일 인터넷 검색을 해서 적당한 페이지를 찾아 냈습니다.
개인들 마다 구글 스프레드 시트에서 자기만의 방식으로 주식 수익률을 관리하고 있으실텐데요.



위의 구글스프레드시트에 있는 종목코드라는 시트(Sheet)에 보시면 수식이 있습니다 .


제가 해당 부분을 별도의 스프레드시트에 분리를 했습니다.
수정도 가능하니 다른 사이트가 있다면 시험해 보시기 바랍니다.



이전 다음증권 주가 긁어오기 페이지에서는 IMPORTHTML함수를 사용했었죠.
이것은 IMPORTXML 을 사용하는 방법인데요.

사용방법은 매개변수(Parameter)로 XML 나 HTML 문서의 URL 그리고 XPATH 명령어를 이용합니다.

Xpath 는 HTML 이나 XML 의 문서 구조와 밀접한 관계가 있어요.
Xpath 설명은 주식 수익률 관리에서 주식 종목 보고서 기능을 추가하면서 쓴 글에서 자세히 설명을 해 놓았습니다


주가와 종목코드를 가져오는 부분에 대하여 간단히 설명을 드리면

URL의 웹페이지를 뒤져서 나오는 TR 태그 밑에 3번째 TD 태그의 값을 가져오는 것인데요.
여러번 반복해서 나타난다면 다음 줄에 쭉 나열 되게 되어 있습니다.
내부에 A 태그가 있으면 속성(Attribute) 등도 가져 올 수 있고 Class 속성이 있는 태그도 찾아 낼 수 있습니다.

위의 주소로 접속 하시고 F12를 누르시면 우측에 다음과 같은 화면을 보실 수 있을 텐데

종목 코드를 가져와 보겠습니다.

//tr/td[1] 혹은
//tr/td[1]/span 혹은
//tr/td[@class='td_c']/span 

이렇게 하시면 종목 코드를 뽑아 낼 수 있습니다. 아래로 갈수록 점점 세분화 하여 검색하는 방법인데요.
종목코드 가 SPAN 으로 싸여져 있지 않는 것이 있었기 때문에 자칫하면 누락이 될 수 있습니다.
그래서 //tr/td[1] 로 한 것입니다.

크롬이나 IE의 개발자 도구에서 Copy Xpath 라는 기능도 제공하는데요.



//*[@id="syno-nsc-ext-gen3"]/div[1]/div[2]/div[1]/table[1]/tbody/tr[1]/td[1]/span

이것을 이용하면 해당 데이터만을 가져올 때 유용합니다.
종목코드 및 현재가 전체를 가져와야 하므로 //table/tbody/tr/td[1]/span 이정도 까지 줄여야할 것 같네요

서울경제 - 전종목 지원



다음 세 식인데요
=IMPORTXML( "https://www.sedaily.com/Stock/Quote/Search?code=&text=", "//dl[@class='tbody']/dt" ) -- 종목명 
=IMPORTXML( "https://www.sedaily.com/Stock/Quote/Search?code=&text=", "//dl[@class='tbody']/dd/span[1]" ) -- 현재가 
=IMPORTXML( "https://www.sedaily.com/Stock/Quote/Search?code=&text", "//dl[@class='tbody']/dt/a/@href" ) -- 종목코드(임시) 
=REGEXEXTRACT(E2,"[0-9A-Z]{6}") 6자리 종목 코드만 빼내는 명령 - 정규식으로 적용


구조를 보면 이렇게 되어 있습니다.

종목명은 //dl[@class='tbody']/dt 이 되며 dt 와 dd가 같은 레벨이므로 dd를 하고 하위에 span 태그가 3개가 존재 span[1] 첫번째를 취하면 주가가 됩니다.

종목 코드는 "//dl[@class='tbody']/dt/a/@href" 인데 dt 태그 밑에 a태그의 href 를취하는 것입니다.

그 밖에 구글 스프레드 시트가 아닌 다른 프로그램이나 파이썬을 이용한다면 XPath 명령어를 참조하여
충분히 원하는 정보를 뽑아 낼 수 있을 수 있을 것 같네요.


본인 네이버 블로그 

https://blog.naver.com/yonghan_shin/221625267706