Golang jQuery와 유사한 구문 및 기능 goquery 라이브러리 알아보기

오늘은 Golang으로 jQuery와 유사한 구문과 기능을 가진 goquery 라이브러리를 알아보려 합니다.

goquery 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

맥에서 Golang의 버전을 올리려면 brew를 이용합니다.

brew upgrade go

우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

go get으로 goquery 패키지를 설치합니다.

go get github.com/PuerkitoBio/goquery

홈의 go 폴더에 goquery 소스코드와 패키지 파일이 생성됩니다.

예제

package main

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.

import (
	"fmt"
	"net/http"

	"github.com/PuerkitoBio/goquery"
)

fmt, http 그리고 goquery를 가져옵니다.

func main() {
	response, err := http.Get("https://minwook-shin.github.io")
	if err != nil {
		panic(err)
	}

원하는 페이지를 가져옵니다.

	defer response.Body.Close()

defer 키워드로 response.Body의 Close()를 호출합니다.

	if response.StatusCode != 200 {
		panic(response.StatusCode)
	}

만약 정상적으로 페이지를 받아오지 못하면 panic을 일으킵니다.

	document, err := goquery.NewDocumentFromReader(response.Body)
	if err != nil {
		panic(err)
	}

Document를 반환합니다.

	document.Find(".posts article .entry").Each(func(i int, s *goquery.Selection) {
		titleText := s.Find("p").Text()
		fmt.Println(titleText)
	})
}

반환한 Document에서 selector로 값을 필터링하여 출력합니다.

Written on November 3, 2019