본문 바로가기
엑셀공부

구글 스프레드시트 IMPORTXML에 대하여

by 유키의 스토리 2023. 8. 16.
반응형

IMPORTXML에 대하여

구글 스프레드시트 IMPORTXML이라는 함수가 있는데 구글 스프레드시트에만 있는 소중한 기능이다. 이 함수는 웹사이트의 XPATH값을 가져오는, 쉽게 말하면 데이터를 크롤링 할 수 있는 중요한 기능중에 하나이다.

예전부터 이 기능을 자주 사용했으며, 좋다고 생각한다. 하지만 문제가 하나 있다. 바로 엄청나게 느리다는 점이다. 내가 처리해야하는 건은 겨우 몇백건정도밖에 되지않지만 그래도 너무나 느리다. 이 부분은 엄청난 문제라고 생각한다. 기능은 좋지만 제대로 쓸 수없는 무용지물과 같은 기능이기 때문이다.

프리코네 분석을 위하여 사용

최근에 프리코네에 대한 캐릭별 정보를 수집하려고 한 적이 있어서 이 함수를 썼으나, 대략 20건 불러오고 그 다음부터는 트래픽문제인지 너무나 느렸다. (인터넷망은 500M이고 컴퓨터는 라이젠3세대 및 램도 잡아먹는 것이 없었다.) 아마도 구글 스프레드 자체에 제한을 걸어놓은 느낌을 받았다. 사람들이 파이썬을 편리한 엑셀보다는 데이터 처리를 하려면 파이썬을 써야하는 이유를 어느정도는 알 것같다.

IMPORTXML 사용하는 방법

프리코네에 관련 사이트에서 따온 표와 함수에 관한 표를 적어두었다

표 자체도 불러올 수 있지만(IMPORTHTML이라는 함수) 사용할 링크가 사라지므로 복붙을 하였다. 그러면 링크가 살아있게된다. 캐릭터의 적재적소에 맞는 등급을 위해서는 전체평점이 아닌 현장별 등급이 필요했다. 따라서 위의 함수를 쓰기로 결정을 한 것이다.

일본 내 프리코네에 대한 사이트가 있는데, 특이하게 텍스트식의 점수보다는 우측과 같은 이미지로 나타나있다. 따라서 단순히 글자로 불러올 수는 없고 이미지로 긁어와야한다는 번거로움이 있다.

IMPORTXML의 인자 정보수집

우선 우측과 같이 긁어오기위해서는 필수 재료들이 있다. 바로 IMPORTXML에 대한 재료들이다.

  1. URL주소가 필요

우측 링크가 걸린 셀(하이퍼링크 된)이 있지만 이 주소값을 가져와야하는데 아쉽게도 내장 함수중에서 긁어오는 값이 전혀 없다. 따라서 함수를 만드는 스크립트작업을 해야하는데 나는 모르기때문에 구글링을 하였다. 다행히도 긁어와주는 함수가 있어서 바로 적용을 했다.

방법을 간단히 설명하자면,

위와같은 경로로 앱스크립트를 클릭한다.

코드를 복붙하고 상단 메뉴줄에서 디스크모양의 저장버튼을 누르고 끄면된다.

그러면 함수를 쓸 수 있게된다.

=linkURL(A3) 이런 식으로 사용하면 된다.

URL따오는 코드관련 출처 및 방법: https://stackoverflow.com/questions/35230764/how-to-extract-url-from-link-in-google-sheets-using-a-formula

2. XPATH에 대한 값이 필요

관련 사이트에서 가져올 부분의 우클릭 후 검사룰 누르면 우측창에 개발자창이 나오게된다.

맨 하단 검사를 누르면

이런 창이 나오는데 해당 코드가 있는 줄에서 우클릭해서 Copy를 누르고 Copy XPath를 누르면 관련 주소가 복사가된다. 사용하는 함수를 보면 하단을 참고하면 된다.

=IMPORTXML(1번 주소, 2번 XPATH) 이렇게 하면 완성이 된다.

XPATH에 대한 변수

하지만 오류가 생겼다. 데이터가 비어있다고 한다... 무슨 문제일까?

아마도 텍스트가 없어서 그럴 가능성이 높다. 이미지는 텍스트가 아니기때문에 인식을 안할 수 있다는 것이다. 따라서 이미지화시켜주면 쉽게 불러와질 것이다.

=IMAGE(위의 함수)

이 함수를 다른 주소에도 적용하려고 시도했으나 비어있거나 잘못된 참조라는 오류문구가 나왔다... 무슨 문제일까?

바로 각 사이트마다 정형화된 list가 아니라 제각각이었다. 예를들면 캐릭터의 설명이 더 있다던가 아니면 전용장비를 끼웠는지 6성인지 각각 셀이 달랐고, 위에 또 다른 참고표가 있어서 테이블표가 4라는 번호가 부여되어있다면 다른 캐릭터는 3이고 5이고 전부 제각각이라는 것이 문제라는 것이다. 따라서 복붙한 패스로는 절대로 채우기핸들로 사용할 수 없고 전부 XPATH를 수정해주어야하는 번거로움이 생긴다.

이에 대해서 다시 구글링을 하였다.

결론적으로 XPATH를 수정하여 사용하는 방법이 있다고 한다. 바로 중요한 역할을 하는 것이 클래스이다. 웹사이트를 만들 때 캐릭터별로 각각 다른 사이트를 새로만드는 것이 아니라 클래스라는 틀을 정하고 만드는 것이라서 그 클래스를 중심으로 다가가면 훨씬 더 문제를 쉽게 해결할 수 있다는 것이다.

XPATH를 살펴보니 순 주소로 되어있어서 클래스로 바꾼 후 일부 주소를 삭제하였다. 역시 잘 작동하였다.

예를들면, 기존에는 //*[@id="AAA"]/div/div[7]/table/tbody/tr[4]/td[4]/img 식으로 되어있었다. 해당 이미지에 대한 경로이다. 아이디로 부여되어있고 div라는 식으로 공간이 나뉘어져있고, 7번째 공간에 테이블이 있다. 그리고 테이블 안에 4행 4열에 이미지가 있다라는 뜻이다.

그런데 문제는 div7번째라는 곳은 변형이 가능해서 캐릭터별 주소마다 다 달랐다. 6도 있고 8도 있었다. 그래서 채우기핸들이 안되는 것이다.그래서 그 아래 테이블이라는 곳의 정해진 클래스가 있었고 그걸 참조하기로 했다.

//*[@class="BBB"]/div/div[7]/table/tbody/tr[4]/td[4]/img

아이디를 해당 표에대한 클래스로 바꾸고 div로 나누어진 공간은 필요없으므로 지웠다. 그러면 아이디를 참고해서 기존방식의 경로로 들어가는 것이 아닌 클래스라는 것을 찾아서 바로 테이블로 들어가게 된다. 그러면 오류가 훨씬 더 적어진다. 물론 테이블 안에서도 행과 열이 일관성이 없다면 또 문제가 생길 여지는 있으나 만일 그런 사이트가 있으면 웹디자이너가 잘못만든 것이다.

그래서 결과는?

아무튼 함수와 이러저러한 변수들에 의하여 배운 것도 많이 있었지만 결론적으로 보면 이것을 수많은 캐릭터에 대한 셀을 만들어야하는데 너무나 느려진다는데 문제가 생긴 것이라 무용지물 짓을 했다. 이참에 파이썬을 배워서 크롤링하는 방법을 배워야할 듯싶다.

우선 소량의 필수캐릭터만 정보를 수집했고 나머지는 차차 알아보기로 했다.

주식에서의 PBR 크롤링

혹시나 이미지라서 느린 것일까?라는 생각도 해보아서 텍스트위주로 가져오는 방법을 해보기 위해 주식에 대한 PBR을 끌어오기로 했다.

결과는 역시나 마찬가지로 너무나 느렸다. 아마도 자체적인 트래픽문제나 아니면 제한이 걸려서 그럴 가능성이 높다고 생각해서, 구글시트로 크롤링하는 것을 포기를 했다. 다른 방법이 있다면 계속 사용하겠지만 할 수 없는 것이다.

하는 방법은 동일...

간단히 정보를 수집하는 방법에 대해 알아보자면,

상장 된 주식 리스트를 받기 위해서는 하단 사이트를 참고해서 엑셀로 받으면 될 것이다.

https://kind.krx.co.kr/corpgeneral/corpList.do?method=loadInitPage

 

데이터를 대충 붙여넣고 위의 방법대로 진행하면 쉽게 가져올 수 있겠지만 몇개 안불러왔는데도 몇시간 째 로딩으로 되어있다. 이래저래 방법을 해보아도 방법은 전혀 없다.

이에 대한 나의 생각

크롤링 작업에 관해서는 구글 스프레드시트는 사용을 하지 않을 듯 싶다. 간단한 작업이라면 모를까 너무 느리고 답답했다. 차라리 수작업으로 하는게 더 빠르다는 것을 느꼈다.

IMPORT에 대한 함수가 많이 있으나 자주 사용하는 것이 IMPORTRANGE이다. 이 함수는 다른 구글 스프레드시트에서 바로 긁어올 수 있다는 최장점이 있다. 물론 느리지도 않고 전에 데이터 작업에서도 유용하게 사용했었다. 그 다음은 IMPORTHTML인데 인터넷 상의 표를 긁어올 수 있다.

아무튼 기존에 잘 사용했던 이유는 함수가 적어서 문제가 없었지만 이번에는 함수량이 엄청나게 많아서 느려졌다고 생각한다. 아무튼 간단한 업무용으로는 누구나 접근할 수 있는 최상의 무기지만, 전문가에게는 간이개발프로그램정도 될 것이다.

#구글 #구글스프레드시트 #구글함수 #IMPORTXML #IMPORTXML함수 #IMPORTRANGE #IMPORTHTML #프리코네 #프린세스커넥트 #주식 #크롤링 #데이터정제 #데이터수집 #랭킹조정 #XPATH #URL주소함수 #함수 #구글스프레드시트함수 #게임분석 #URL #주소추출 #이미지불러오기

 

반응형

댓글