본문 바로가기
구글 스프레드 시트

구글 스프레드시트 웹 크롤링 함수 import

by 기뮤네 2023. 2. 8.

다른 웹사이트의 자료를 구글 시트에 실시간 반영 시키기

인터넷 페이지 시트에 불러오기

1. import 함수

디자인 작업에서도 import는 외부데이터를 불러오는 기능을 합니다.

스프레드시트에서도 같습니다.

앞서 배웠던 importrange는 다른 스프레드시트의 데이터를 불러오는 함수였습니다.

import 함수에는 이 외에도 여러가지가 있습니다.

 

=IMPORTXML(URL, xpath_검색어, 언어)

=IMPORTDATA(URL, 구분자, 언어) .csv(쉼표로 구분된 값) 또는 .tsv(탭으로 구분된 값) 형식으로 주어진 URL에서 데이터를 가져옵니다.

=IMPORTFEED(URL, [검색어], [헤더], [항목_개수]) RSS 또는 Atom 피드를 가져옵니다.

=IMPORTHTML(URL, 검색어, 색인, 언어) HTML 페이지에서 표 또는 목록에 있는 데이터를 가져옵니다.

 

모두 다른 사이트의 데이터를 시트로 불러오는 함수입니다.

시각적인 부분을 똑같이 구현하는 것은 아니고, 텍스트, 숫자등의 정보만 불러옵니다.

테이블이라면 테이블 형식, 리스트라면 리스트 형식으로 불러오게 됩니다.

 

728x90

2. IMPORTXML

Xpath 소스를 이용해 데이터를 불러옵니다.

사실 이 함수를 처음 사용할 때, 굉장히 머리가 아팠습니다. 그런데 사용하고 있는 지금 한가지 조언을 드리자면, 저게 뭔지 이해하려고 하지 마시고, 그냥 아 이렇게 사용하는거구나 하는 부분만 아시면 될 것 같습니다.

 

저는 다이어리를 굉장히 좋아합니다. 그래서 자주 검색해보고는 하는데, 네이버쇼핑에서 '다이어리'를 검색했을 때, 랭킹순으로 뜨는 제품의 이름과 가격을 자동으로 시트로 불러와서 보고 싶습니다.

 

네이버에서 쇼핑에서 '다이어리'를 검색해서 다음과 같은 화면을 만났습니다.

저는 여기서 리스트 순서대로 제품명 '2023년 이야기다이어리....' 와 가격 '광고 16,620원 ..' 이 두개 영역을 불러오고 싶습니다.

 

우선 importxml 함수의 구조를 살펴보겠습니다.

 

=IMPORTXML("URL", "xpath_검색어", 언어)

맨 뒤에 '언어' 부분은 크게 신경쓰지 않으셔도 되고, =IMPORTXML("URL", "xpath_검색어") 이렇게만 쓰셔도 사용 가능한 함수입니다.

 

우선 위 페이지의 url을 불러와보겠습니다.

 

그대로 복사합니다.

위 주소창에는 '다이어리' 라고 검색어가 한글로 입력되어 있지만, 주소를 복사해서 붙여넣게 되면 다음과 같이 나옵니다.

 

https://search.shopping.naver.com/search/all?where=all&frm=NVSCTAB&query=%EB%8B%A4%EC%9D%B4%EC%96%B4%EB%A6%AC

 

초록색 부분이 원래 '다이어리'라고 되어있던 부분입니다.

무튼 위의 주소를 먼저 따옴표 사이에 넣어줍니다.

이제 Xpath 소스를 따오겠습니다.

첫 번째 제품이 나와있는 섹션에 마우스를 올리면 다음과 같이 파란색으로 영역 표시가 됩니다.

그 상태에서 마우스 오른쪽을 클릭하여 '검사'를 눌러줍니다.

그러면 인터넷창 오른쪽으로 '검사'페이지가 뜹니다. 

검사 페이지에서도 마우스를 대면 파란색으로 섹션이 표시되고, 검사페이지 소스에 마우스가 가면 오른쪽 쇼핑리스트에도 그 소스에 해당하는 영역이 파란색으로 구역표시가 됩니다.

그러면 제품 이름에 해당하는 영역을 찾아보겠습니다.

검사창 부분 초록색 체크부분에 마우스를 대면, 오른쪽 쇼핑리스트 제품명에 같이 표시가 됩니다.

검사창에서 파란색으로 영역표시가 된 상태에서 마우스 오른쪽을 클릭하면 위와 같은 메뉴가 표시가됩니다.

coopy메뉴에서 copy full XPath를 선택합니다.

 

원래는 그냥 XPath를 복사해서 썼던걸로 기억하는데, 시트가 업데이트 되면서 변경이 된 것같습니다.

아마 몇몇 importxml 게시물에서는 //*[@id="__next"] 이런 형태의 소스를 설명할텐데, 지금 해본 결과 해당 소스로는 함수가 오류가 납니다.

 

일단 우리는 복사한 full Xpath 를 붙여넣어 보겠습니다.

 

/html/body/div/div/div[2]/div[2]/div[3]/div[1]/ul/div/div[1]/li/div/div[2]/div[1]

 

위와 같은 주소가 나옵니다.

그러면 이제 본격적으로 함수를 사용해보겠습니다.

 

=IMPORTXML("https://search.shopping.naver.com/search/all?where=all&frm=NVSCTAB&query=%EB%8B%A4%EC%9D%B4%EC%96%B4%EB%A6%AC", "/html/body/div/div/div[2]/div[2]/div[3]/div[1]/ul/div/div[1]/li/div/div[2]/div[1]")

 

보라색은 먼저 복사했던 쇼핑리스트 페이지 주소이고, 주황색은 Xpath 소스입니다.

셀 하나를 선택하시고 위의 함수를 입력해주시면, 네이버에서 봤던 제품 이름이 텍스트로 뜨는 것을 볼 수 있습니다.

 

같은 방식으로 가격 부분의 엑스패스 소스를 따와서 함수를 넣으면 가격이 뜹니다.

 

자 그런데 이제 총 10개 제품을 리스트로 보고 싶습니다.

 

첫번째 제품의 엑스패스와 두번째 제품의 엑스패스를 비교해보면

 

/html/body/div/div/div[2]/div[2]/div[3]/div[1]/ul/div/div[1]/li/div/div[2]/div[1]

/html/body/div/div/div[2]/div[2]/div[3]/div[1]/ul/div/div[2]/li/div/div[2]/div[1]

 

표시한 부분의 숫자가 달라짐을 알 수 있습니다. 해당 부분 숫자만 1~10으로 순서대로 기입해주면 리스트를 볼 수 있습니다.

 

그리고 제품명과 가격의 엑스패스를 비교해보면

 

/html/body/div/div/div[2]/div[2]/div[3]/div[1]/ul/div/div[1]/li/div/div[2]/div[1]

/html/body/div/div/div[2]/div[2]/div[3]/div[1]/ul/div/div[1]/li/div/div[2]/div[2]

 

또 한 다른 부분이 보입니다. 

 

제품명, 가격이 아닌 다른 부분으로 리스트를 불러오고자 할 때도, 위와 같이 엑스패드를 같은 폰트, 같은 크기로 나열해 놓고 보면 [ ] 괄호 안의 숫자가 다른 것을 발견하실 겁니다.

 

함수는 어떻게 분석해서 어떻게 변경하느냐에 따라 다양하게 사용이 가능합니다.

 

 

다음 게시물은 아래 순서대로 게시하도록 하겠습니다.

1) IMPORTDATA

2) IMPORTFEED

3) IMPORTHTML

728x90

댓글