오늘은 GoogleSheet 의 함수인,
IMPORTHTML과 IMPORTXML을 활용하여서,
크롤링을 하는 방법에 대해서 정리해 보도록 하겠습니다.
1. IMPORTHTML 함수
구글시트에는 무려 html페이지에서 table 또는 리스트를 import 하는 함수가 존재합니다.
문서를 보면 아래와 같이 설명이 되어 있네요.
인자로 url, query, index만 넣어주면 되는데요.
query는 "table" 또는 "list"를 넣어주면 되구요.
index부분에는
2. 네이버 금융뉴스 가져오기
네이버 금융뉴스를 가져와 보겠습니다.
크롬에서 우측마우스 버튼을 눌러서 Inspect 모드로 들어갑니다.
Inspect모드에서 해당 엘리먼트를 검사해보는데요.
테이블로 되어있는지, 리스트로 되어있는지를 보기 위해서 입니다.
리스트로 되어있다는 것을 확인할 수 있습니다.
태그라든가 복잡한 코딩이 전혀 필요없습니다.
테이블인지 리스트인지만 알면 되고,
몇 번째에 위치하는지만 알아내면 되는데요.
이제, 해당 페이지에서 몇 번째 리스트인지, 혹은 몇 번째 테이블인지를 알아내기는 해야 합니다.
테이블이라면, "<table" 을 순서가 없는 리스트라면 "<ul"을 검색해서 해당 페이지안에 몇개의 태그가 있는지 알아내고,
하나씩 넣어보면서 결과를 보고 찾아내도 충분합니다.
엘리먼트의 검색된 순서가 반드시 IMPORTHTML의 순서와 같다고 할수는 없기 때문에, 검색된 순서로 찾아내기는 어렵습니다.
때로는 복잡한 로직보다, 단순한 노동이 더욱 효과적일때도 있지요.
해당 페이지에서 7번째의 리스트에 아래 뉴스정보가 들어있어서 아래와 같이 불러 올 수 있었습니다.
3. IMPORTXML
3-1. IMPORTXML 함수
리스트나 테이블만으로는 원하는 값을 찾기 어려울 때는
importxml함수를 사용해주면 됩니다.
이름은 xml이지만, 아래 문서에 나온 것 처럼 xml, html, csv, tsv, rss 등의 데이터타입을 이용할 수 있습니다.
이 함수는 인자로 url과 xpath_query를 전달해 주면 됩니다.
다만 이것을 활용하기 위해서는 약간의 XPath 관련 지식이 필요합니다.
특히 아래의 문법에 대해서는 기억하고 있어야 하는데요.
구분 | 설명 |
nodename | 해당하는 이름의 노드를 select 함 |
/ | 해당지점의 root 노드를 기준으로 노드를 select 함 |
// | 해당 node가 어디에 있던 관계없이 특정 node를 선택 |
. | 현재의 노드 |
.. | 부모 노드 |
@ | attribute선택 |
예를 들어서 아래와 같이 간단한 xml이 있다고 가정해 보겠습니다.
name엘리먼트 노드를 찾기 위해서는,
//student/node 로 찾아줄 수 있는 것 입니다.
<student>
<name>김</name>
</studdent>
만약 div태그안에 엘리먼트가 특정 class name을 가지고 있다면,
"@"기호를 이용해서, //div[@class='클래스이름'] 과 같은 방식으로 찾아주면 됩니다.
이러한 방식을 이용해서 XPath를 이용해서 위의 금융뉴스 정보를 가져와 보겠습니다.
뉴스가 main_news 클래스를 가지는 div태그 하위의 ul아래에 있는 li들에 존재하였기 때문에 아래와 같이 할 수 있습니다.
xpath를 이용해서 아래와 같이 li의 정보들을 가져올 수 있습니다.
4. 팁
4-1. 구글시트에서 함수 도움말 찾기( 문서)
구글 시트는 도움말에서 함수목록과 정보를 쉽게 볼 수 있도록 해 주고 있습니다.
아래와 같이 메뉴에서 '도움말> 함수목록'으로 가면 됩니다.
댓글