[go] HTML 파싱 라이브러리

HTML 파싱은 웹페이지에서 필요한 정보를 추출하거나 분석하기 위해 중요한 단계입니다. Go 언어로 작성된 프로그램에서 HTML 파싱을 수행하기 위해 사용할 수 있는 여러 라이브러리가 있습니다. 이번 포스트에서는 Go 언어를 사용하여 HTML을 파싱하는데 유용한 라이브러리 몇 가지를 소개하겠습니다.


1. GoQuery

GoQuery는 Go 언어를 기반으로 작성된 HTML 파싱 및 CSS 선택기 기능을 제공하는 라이브러리입니다. GoQuery를 사용하면 jQuery와 유사한 방식으로 HTML 문서를 탐색하고 조작할 수 있습니다. 아래는 GoQuery를 사용하여 HTML 문서에서 타이틀을 추출하는 예제 코드입니다.

package main

import (
	"fmt"
	"github.com/PuerkitoBio/goquery"
)

func main() {
	doc, err := goquery.NewDocument("http://example.com")
	if err != nil {
		panic(err)
	}

	title := doc.Find("title").Text()
	fmt.Println("Title:", title)
}

GoQuery는 HTML 문서를 구문 분석하여 DOM 트리를 구축하고, CSS 선택자를 사용하여 원하는 요소를 선택 및 조작할 수 있는 기능을 제공합니다.


2. Golang.org/x/net/html

Golang.org/x/net/html은 Go 언어의 표준 라이브러리 중 하나로, HTML 파싱 및 조작을 위한 패키지를 제공합니다. 이 패키지를 사용하여 HTML 문서를 구문 분석하고, 원하는 요소를 추출할 수 있습니다. 아래는 Golang.org/x/net/html 패키지를 사용하여 HTML 문서에서 모든 링크를 추출하는 예제 코드입니다.

package main

import (
	"fmt"
	"golang.org/x/net/html"
	"net/http"
	"os"
)

func main() {
	resp, err := http.Get("http://example.com")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(1)
	}
	defer resp.Body.Close()

	doc, err := html.Parse(resp.Body)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(1)
	}

	var links []string
	var f func(*html.Node)
	f = func(n *html.Node) {
		if n.Type == html.ElementNode && n.Data == "a" {
			for _, a := range n.Attr {
				if a.Key == "href" {
					links = append(links, a.Val)
				}
			}
		}
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			f(c)
		}
	}
	f(doc)

	fmt.Println("Links:", links)
}

Golang.org/x/net/html 패키지를 사용하면 HTML 문서를 구문 분석하고, 원하는 요소를 추출하는데 필요한 기능을 제공합니다.


이상으로 Go 언어를 사용하여 HTML 파싱을 위한 두 가지 라이브러리를 간단히 소개해보았습니다. 이외에도 다양한 라이브러리들이 존재하니, 프로젝트에 적합한 라이브러리를 선택하여 HTML 파싱 작업을 수행할 수 있습니다.

참고 문헌