Golang HTML 토크나이저
새로운 dom 문서를 생성하여 PHP 또는 Js에서 간단히 수행할 수 있는 것처럼 golang에서 HTML 콘텐츠를 구문 분석하고 추출합니다. golang에는 요구 사항에 따라 다양한 패키지를 사용하여 여러 가지 방법이 있습니다. 내가 알아낸 몇 가지 방법은 다음과 같습니다.
지금은 데모 목적으로 gohtml을 사용하여 토큰화를 사용하겠습니다.
Tokenization is the lexical analysis, parsing the input into tokens. Among HTML tokens are start tags, end tags, attribute names and attribute values.
문서를 토큰화하는 것은 문서를 DOM과 유사한 요소 및 텍스트 노드의 트리로 구문 분석하는 첫 번째 단계입니다.
지원되는 HTML 토큰 유형:
html.StartTagToken
:
html.EndTagToken
: an end tag such as html.SelfClosingTagToken
: a self-closing tag such as <img .../>
html.TextToken
: text content within a taghtml.CommentToken
: an HTML comment such as <!-- comment -->html.DoctypeToken
: a document type declaration such as <!DOCTYPE html>예시:
와 같은 시작 태그package main
import (
"fmt"
"strings"
"io"
"golang.org/x/net/html"
)
func main() {
tokenizer := html.NewTokenizer(strings.NewReader(sampleHtml))
for {
tokenType := tokenizer.Next()
token := tokenizer.Token()
if tokenType == html.ErrorToken {
if tokenizer.Err() == io.EOF {
return
}
fmt.Printf("Error: %v", tokenizer.Err())
return
}
fmt.Printf("Token: %v\n", html.UnescapeString(token.String()))
}
}
const sampleHtml = `<!DOCTYPE html><html><head><style> body {background-color: powderblue;} h1 {color: red;} p {color: orange;}</style><title>Sample HTML Code</title><script src="my-script.js">abc</script></head><body><h1>Main title</h1><p id="demo"></p><a href="https://dev.to/">Dev Community</a><script>document.getElementById("demo").innerHTML = "Hello JavaScript!";</script></body></html>`
산출:
Token: <!DOCTYPE html>
Token: <html>
Token: <head>
Token: <style>
Token: body {background-color: powderblue;} h1 {color: red;} p {color: orange;}
Token: </style>
Token: <title>
Token: Sample HTML Code
Token: </title>
Token: <script src="my-script.js">
Token: abc
Token: </script>
Token: </head>
Token: <body>
Token: <h1>
Token: Main title
Token: </h1>
Token: <p id="demo">
Token: </p>
Token: <a href="https://dev.to/">
Token: Dev Community
Token: </a>
Token: <script>
Token: document.getElementById("demo").innerHTML = "Hello JavaScript!";
Token: </script>
Token: </body>
Token: </html>
여기에서는 단순히 Error Token 또는 EOF를 확인하고 모든 토큰 유형을 그대로 인쇄했습니다.
위에서 언급한
html.StartTagToken
, html.EndTagToken
등과 같은 토큰을 기반으로 HTML을 구문 분석할 수도 있습니다.또한 html, h1, script, style 등과 같은 요소 유형에 대해
tokenizer := html.NewTokenizer(strings.NewReader(sampleHtml))
for {
tokenType := tokenizer.Next()
token := tokenizer.Token()
if tokenType == html.ErrorToken {
if tokenizer.Err() == io.EOF {
return
}
fmt.Printf("Error: %v", tokenizer.Err())
return
}
switch token.Data {
case "script":
fmt.Printf("Script Token: %v\n", html.UnescapeString(token.String()))
case "style":
fmt.Printf("Style Token: %v\n", html.UnescapeString(token.String()))
default: //This will also include contents of <script>, <style> tags content
fmt.Printf("Others: %v\n", html.UnescapeString(token.String()))
}
}
참조
Reference
이 문제에 관하여(Golang HTML 토크나이저), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dave3130/golang-html-tokenizer-5fh7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)