Go에서 HTML을 파싱하고 생성하는 방법
구문 분석은 문서의 구조를 분석하고 해석하는 것입니다. 구문 분석 프로세스에는 문서에서 특정 요소, 속성 또는 데이터를 추출하고 특정 표준이나 규칙을 준수하면서 문서의 형식이 올바른지 확인하는 작업이 포함될 수 있습니다. 파싱은 주로 웹 페이지에서 데이터를 추출하거나 사용자에게 표시하기 전에 웹 페이지의 구조를 조작하는 데 사용됩니다.
Go는 웹 페이지에서 널리 사용되는 HTML 및 XML 형식을 포함하여 문서 작업을 위한 패키지를 제공합니다. html 패키지 는 HTML을 토큰화하고 구문 분석하기 위한 기능을 제공합니다.
HTML 패키지
html 패키지 는 HTML 문서 구문 분석 및 조작, 구문 분석 트리 순회 및 트리 구조 조작을 위한 HTML5 호환 토크나이저 및 구문 분석기를 제공합니다. html 패키지는 Go 표준 라이브러리의 내장 패키지입니다 .
html 패키지 의 주요 기능 중 하나는 HTML 문서를 구문 분석 하고 트리를 탐색하고 문서에서 정보를 추출하기 위해 FirstChild 및 NextSibling 과 같은 기능을 사용할 수 있는 구문 분석 트리의 루트 노드를 반환할 수 있는 구문 분석 기능입니다. 이 패키지는 HTML 문서의 일부를 구문 분석하기 위한 ParseFragment 기능도 제공합니다.
EscapeString 함수는 HTML에 더 안전하게 포함하기 위해 문자열의 특수 문자를 이스케이프 처리하는 데 편리합니다 . 이 기능을 사용하여 특수 문자를 해당 HTML 엔터티로 변환하여 XSS(교차 사이트 스크립팅) 공격을 방지할 수 있습니다.
html 패키지 를 시작하려면 패키지를 Go 프로젝트 파일로 가져올 수 있습니다.
import "golang.org/x/net/html"
html 패키지 는 HTML 생성 기능을 제공하지 않습니다. 대신 HTML 템플릿 생성을 위한 일련의 기능을 제공하는 html/template 패키지를 사용할 수 있습니다. html/template 패키지는 이스케이프된 HTML 버전을 응답 작성기에 쓰기 위한 template.HTMLEscape 함수 를 제공 합니다 .
html/template 패키지도 표준 라이브러리의 일부이며 패키지를 가져오는 방법은 다음과 같습니다 .
import "html/template"
html 패키지 는 Go 생태계에서 가장 널리 사용되는 템플릿 패키지이며 다양한 작업 및 데이터 유형을 지원합니다.
Go에서 HTML 구문 분석
html 패키지 의 Parse 기능은 HTML 텍스트 및 문서를 구문 분석하는 데 도움이 됩니다. Parse 함수는 파일 문서를 포함하는 첫 번째 인수인 io.Reader 인스턴스와 HTML 문서의 루트 노드인 * html.Node 인스턴스를 받습니다 .
Parse 함수를 사용하여 웹 페이지를 구문 분석하고 웹 페이지의 모든 URL을 반환하는 방법은 다음과 같습니다.
import (
"fmt"
"golang.org/x/net/html"
"net/http"
)
func main() {
// Send an HTTP GET request to the example.com web page
resp, err: = http.Get("https://www.example.com")
if err! = nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
// Use the html package to parse the response body from the request
doc, err: = html.Parse(resp.Body)
if err! = nil {
fmt.Println("Error:", err)
return
}
// Find and print all links on the web page
var links []string
var link func(*html.Node)
link = func(n *html.Node) {
if n.Type == html.ElementNode && n.Data == "a" {
for _, a: = range n.Attr {
if a.Key == "href" {
// adds a new link entry when the attribute matches
links = append(links, a.Val)
}
}
}
// traverses the HTML of the webpage from the first child node
for c: = n.FirstChild; c! = nil; c = c.NextSibling {
link(c)
}
}
link(doc)
// loops through the links slice
for _, l: = range links {
fmt.Println("Link:", l)
}
}
main 함수 는 http 패키지 의 Get 함수를 사용하여 웹사이트에 HTTP GET 요청을 보내고 페이지 응답 본문을 검색합니다. html 패키지 의 Parse 함수는 응답 본문을 구문 분석하고 HTML 문서를 반환합니다.
링크 변수 는 웹 페이지의 URL을 보유할 문자열 조각입니다. 링크 함수 는 html 패키지 의 Node 메소드에 대한 포인터 참조를 가져 오고 노드의 속성 인스턴스의 Key 메소드는 지정된 속성(이 경우 href )에 포함된 데이터를 반환합니다. 이 함수는 FirstChild 노드에서 NextSibling 메서드로 문서를 순회하여 웹 페이지의 모든 URL을 인쇄합니다. 마지막으로 for 루프는 링크 슬라이스의 모든 URL을 인쇄합니다.
다음은 작업 결과입니다.
Go에서 HTML 생성
html/template 패키지 는 HTML 템플릿의 안전하고 효율적인 구문 분석 및 실행을 위한 일련의 기능을 제공합니다. 이 패키지는 HTML 구문 분석 및 조작 기능을 제공 하는 html 패키지 와 함께 사용하도록 설계되었습니다 .
html/template 패키지 를 사용하여 서버 측 렌더링을 위한 HTML을 생성할 수 있습니다 . HTML 생성은 이메일 전송, 서버 측 프런트엔드 렌더링 등과 같은 많은 사용 사례에 편리합니다. 웹 페이지의 HTML과 상호 작용하고 조작하기 위해 지도 및 구조체와 같은 내장 Go 데이터 유형을 사용할 수 있습니다.
html/template 패키지 로 HTML을 성공적으로 생성하려면 Go HTML 템플릿 구문을 이해해야 합니다 .
import (
"html/template"
"os"
)
type webPage struct {
Title string
Heading string
Text string
}
func main() {
// Define the template
tmpl: = `
<!DOCTYPE html>
<html>
<head>
<title>{{.Title}}</title>
</head>
<body>
<h1>{{.Heading}}</h1>
<p>{{.Text}}</p>
</body>
</html>`
// Define the data to be used in the template
web: = webPage{
Title: "An Example Page",
Heading: "Welcome to my website!",
Text: "This is the home page of my website.",
}
// Create a new template and parse the template string
t, err: = template.New("webpage").Parse(tmpl)
if err! = nil {
panic(err)
}
// Execute the template and write the result to stdout
err = t.Execute(os.Stdout, web)
if err! = nil {
panic(err)
}
}
tmpl 변수는 HTML 문자열을 보유합니다 . HTML 문자열은 Go 템플릿 구문을 사용하여 페이지 제목, h1 헤더 및 텍스트 단락을 정의합니다. webPage 구조체는 Title , Heading 및 Text 필드가 있는 웹 페이지 의 데이터 필드를 정의합니다 .
템플릿 패키지의 New 함수 의 Parse 메서드는 템플릿 문자열을 사용하여 새 템플릿을 만들고 구문 분석합니다. 새 템플릿 인스턴스 의 실행 기능은 구조체 인스턴스의 데이터로 템플릿을 실행하고 결과를 표준 출력으로 반환합니다(이 경우 결과를 콘솔에 인쇄함).
Go로 웹 애플리케이션 구축
Go로 HTML을 구문 분석하고 생성하는 방법을 배우는 것은 Go로 보다 정교한 웹 애플리케이션을 구축하기 위한 올바른 방향으로 나아가는 한 단계입니다. Gin 및 Echo와 같은 프레임워크와 Gorilla Mux 및 Chi Router와 같은 라우터를 사용하여 웹 애플리케이션의 서버 측을 구축할 수 있습니다.
이러한 패키지는 net/http 패키지(Go에서 HTTP와 상호작용하기 위한 기본 제공 패키지)를 기반으로 하며 Go에서 서버 및 라우터 설정의 복잡성을 추상화합니다.
답글 남기기