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 파싱 작업을 수행할 수 있습니다.
참고 문헌
- GoQuery: https://github.com/PuerkitoBio/goquery
- Golang.org/x/net/html: https://pkg.go.dev/golang.org/x/net/html