[go] HTML 데이터 가공

HTML은 웹페이지의 구조와 내용을 정의하는 마크업 언어입니다. 때때로 웹 개발자는 HTML에서 데이터를 추출하거나 가공해야 하는 경우가 있습니다. 이번 글에서는 Go 언어를 사용하여 HTML 데이터를 가공하는 방법에 대해 알아보겠습니다.

HTML 데이터 파싱

Go 언어에서 HTML 데이터를 가공하기 위해서는 먼저 HTML 문서를 파싱하여 원하는 요소를 추출해야 합니다. 이를 위해 goquery 라이브러리를 사용할 수 있습니다.

package main

import (
	"fmt"
	"log"
	"strings"

	"github.com/PuerkitoBio/goquery"
)

func main() {
	htmlData := `<html><body><h1>Hello, World!</h1><p>This is a paragraph.</p></body></html>`

	doc, err := goquery.NewDocumentFromReader(strings.NewReader(htmlData))
	if err != nil {
		log.Fatal(err)
	}

	doc.Find("h1").Each(func(i int, s *goquery.Selection) {
		fmt.Println(s.Text())
	})
}

위의 예제 코드에서는 goquery를 사용하여 HTML 데이터를 파싱하고, h1 요소를 추출하여 출력하는 예제를 보여줍니다.

HTML 데이터 가공

추출한 HTML 요소를 가공하여 필요한 작업을 수행할 수 있습니다. 예를 들어, 텍스트 데이터에서 원하는 부분을 추출하거나 특정 속성을 가져오는 등 다양한 작업이 가능합니다.

func main() {
	htmlData := `<html><body><div class="container"><p>Some text</p><a href="https://example.com">Link</a></div></body></html>`

	doc, err := goquery.NewDocumentFromReader(strings.NewReader(htmlData))
	if err != nil {
		log.Fatal(err)
	}

doc.Find("div.container").Each(func(i int, s *goquery.Selection) {
		// 클래스가 container인 div 요소의 텍스트 추출
		fmt.Println(s.Find("p").Text())

		// 링크의 href 속성값 추출
		s.Find("a").Each(func(i int, link *goquery.Selection) {
			href, exists := link.Attr("href")
			if exists {
				fmt.Println(href)
			}
		})
	})
}

위의 예제 코드에서는 goquery를 사용하여 클래스가 container인 div 요소의 텍스트와 링크의 href 속성값을 추출하는 예제를 보여줍니다.

마치며

Go 언어를 사용하여 HTML 데이터를 가공하는 방법에 대해 간단히 살펴보았습니다. goquery 라이브러리를 활용하여 HTML 데이터를 파싱하고 가공하는 다양한 작업을 수행할 수 있으므로, 웹 개발 프로젝트에서 유용하게 활용할 수 있을 것입니다.