[go] 웹 페이지 구문 분석
Go 언어를 사용하여 웹 페이지를 구문 분석하고 데이터를 추출하는 방법을 알아보겠습니다.
1. 웹 페이지 다운로드
우선 원하는 웹 페이지를 다운로드해야 합니다. 이를 위해서는 net/http
패키지를 사용하여 HTTP GET 요청을 보내고, 응답을 받아야 합니다.
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "http://example.com"
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}
2. HTML 구문 분석
이제 다운로드한 웹 페이지의 HTML을 파싱하여 원하는 데이터를 추출할 수 있습니다. Go 언어에서는 golang.org/x/net/html
패키지를 사용하여 HTML을 구문 분석할 수 있습니다.
package main
import (
"fmt"
"golang.org/x/net/html"
"net/http"
)
func main() {
url := "http://example.com"
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
doc, err := html.Parse(resp.Body)
if err != nil {
panic(err)
}
// 필요한 데이터 추출
// ...
}
3. 데이터 추출
HTML을 파싱한 후에는 필요한 데이터를 추출할 수 있습니다. golang.org/x/net/html
패키지의 함수들을 사용하여 원하는 요소나 속성을 찾아내고 값을 추출할 수 있습니다.
func extractText(n *html.Node) string {
var text string
if n.Type == html.TextNode {
text = n.Data
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
text += extractText(c)
}
return text
}
func main() {
// 이전 코드 생략
// 필요한 데이터 추출
var data string
var f func(*html.Node)
f = func(n *html.Node) {
if n.Type == html.ElementNode && n.Data == "title" {
data = extractText(n)
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
f(c)
}
}
f(doc)
fmt.Println(data)
}
위 코드에서는 타이틀 요소의 텍스트를 추출하는 예제입니다.
이제 Go 언어를 사용하여 웹 페이지를 다운로드하고 HTML을 파싱하며 데이터를 추출하는 방법에 대해 알아보았습니다. 고급 기술을 추가하여 원하는 데이터를 구문 분석하는 방법을 익히고 나만의 웹 스크래퍼를 개발해보세요.
참고문헌: golang.org/x/net/html