안녕하세요. k 입니다.
python의 scrapy를 사용하려 하다가 높은 진입 장벽에 막혔습니다. (귀찮아서 그런거 아님)
requests와 beautifulsoup보다 더 쉽고 빠르게 스크래퍼를 만들 방법을 고민하다가 golang에 colly 라는 프레임워크가 있다는 말을 발견하고 사용해본 후기를 남기고자 합니다.
사용법이 워낙 간단해서 그런지 한글로 된 자료가 거의 없어서 고생 했었는데 이 글을 읽는 분들은 그러지 않기를 바랍니다. ㅎㅎ
0. 공식 문서
공식 문서에 예제도 많고 정말 잘 정리되어 있습니다.
a. 설치법
github.com/gocolly/colly/v2 latest
b. 문법
import (
"fmt"
"github.com/gocolly/colly"
)
func ScrapeMK() {
baseUrl := "https://www.mk.co.kr/news/stock/?page="
collector := colly.NewCollector(colly.Async(true))
collector.OnHTML("dl .article_list", func(e *colly.HTMLElement) {
title := e.ChildText("a")
description := e.ChildText("span .desctxt")
fmt.Println(title, description)
})
for i := 0; i <= 10; i++ {
collector.Visit(baseUrl + strconv.Itoa(i))
}
collector.Wait()
}
이렇게 간단한 코드로 (*비동기로 실행되는) 매일경제 뉴스 사이트의 증권파트 스크래퍼를 만들었습니다.
매우매우 빠르고 간단합니다.
반복되는 html 코드에서 OnHTML함수로 쉽게 값을 추출 할 수 있고, OnResponse 등등의 다른 함수도 직관적이며 사용하기 쉽습니다. 조금 헤매었던 부분인 child-> parent로 접근 할 때에도
e.DOM.Parents().Find("h1") 와 같은 코드를 통해서 매우 쉽게 접근 할 수 있습니다.
기본적으로 colly의 selector는 goquery 의 selector를 사용하기 때문에 쉽게 이해할 수 있을 것 같습니다.
추가로 궁금한 사항이 있으면 덧글 부탁드립니다.
'프로그래밍 > golang' 카테고리의 다른 글
주니어 개발자의 golang 서버 개발일지 -3 웹소켓을 이용한 채팅방 만들기. (0) | 2021.04.22 |
---|---|
주니어 개발자의 go랭 서버 개발일지 -2 웹소켓 생성 및 읽고 쓰기 (0) | 2021.04.15 |
주니어 개발자의 go랭 서버 개발일지 -1 프로젝트 회고 (0) | 2021.04.15 |