golang.org/x/net/html
, github과 같은 다양한 도구를 사용하여 HTML 문서를 구문 분석할 수 있습니다. .com/PuerkitoBio/goquery
등. 이러한 도구는 HTML 문서를 구문 분석, 탐색 및 수정하기 위한 일련의 방법과 구조를 제공합니다. golang.org/x/net/html
、github.com/PuerkitoBio/goquery
等。这些工具提供了一系列方法和结构,用于解析、遍历和修改 HTML 文档。
<p>2.1 使用 golang.org/x/net/html
<p>golang.org/x/net/html
是 Go 语言提供的一个标准的库,它提供了一个丰富的 API 来解析 HTML 文档。接下来,我们将演示如何使用该库来查询 HTML 文档中的节点数据。
<p>下面是一个简单的 HTML 文档:<!DOCTYPE html> <html> <head> <title>A Simple HTML Document</title> </head> <body> <h1>This is a heading</h1> <p>This is a paragraph.</p> <p>This is another paragraph.</p> </body> </html>
<p>
标签)的文本内容。首先,我们需要将 HTML 文档解析为 DOM 树结构,然后通过递归遍历 DOM 树来查询节点数据。package main import ( "fmt" "golang.org/x/net/html" "strings" ) var htmlString = ` <!DOCTYPE html> <html> <head> <title>A Simple HTML Document</title> </head> <body> <h1>This is a heading</h1> <p>This is a paragraph.</p> <p>This is another paragraph.</p> </body> </html> ` func main() { reader := strings.NewReader(htmlString) doc, err := html.Parse(reader) if err != nil { fmt.Println("Failed to parse HTML string:", err) return } var find func(*html.Node) find = func(n *html.Node) { if n.Type == html.ElementNode && n.Data == "p" { fmt.Println(n.FirstChild.Data) } else { for c := n.FirstChild; c != nil; c = c.NextSibling { find(c) } } } find(doc) }
strings.NewReader()
将字符串转换为 io.Reader 接口类型,并将其传递给 html.Parse()
函数来解析 HTML 文档。然后,我们定义了一个名为 find()
的递归函数,用于遍历 DOM 树,并查找符合条件的节点。当遇到一个段落节点时,我们输出该节点的文本内容。最后,我们调用 find()
函数来查询并输出所有段落节点的文本内容。<p>2.2 使用 github.com/PuerkitoBio/goquery
<p>github.com/PuerkitoBio/goquery
是一个很受欢迎的 Go 语言库,它为 HTML 解析和查询提供了一种简单且方便的方式。我们可以使用 goquery
来遍历并查询 HTML 文档,而无需深入了解 DOM 树的结构。<p>下面是一个示例 HTML 文档:<!DOCTYPE html> <html> <head> <title>A Simple HTML Document</title> </head> <body> <h1>This is a heading</h1> <p>This is a paragraph.</p> <p>This is another paragraph.</p> </body> </html>
goquery
可以轻松实现:package main import ( "fmt" "github.com/PuerkitoBio/goquery" "strings" ) var htmlString = ` <!DOCTYPE html> <html> <head> <title>A Simple HTML Document</title> </head> <body> <h1>This is a heading</h1> <p>This is a paragraph.</p> <p>This is another paragraph.</p> </body> </html> ` func main() { reader := strings.NewReader(htmlString) doc, err := goquery.NewDocumentFromReader(reader) if err != nil { fmt.Println("Failed to parse HTML string:", err) return } doc.Find("p").Each(func(i int, s *goquery.Selection) { fmt.Println(s.Text()) }) }
strings.NewReader()
将字符串转换为 io.Reader 接口类型,并将其传递给 goquery.NewDocumentFromReader()
函数来解析 HTML 文档。然后,我们使用 doc.Find("p")
来查询所有段落节点,并通过 s.Text()
方法来输出其文本内容。
<p>三、总结
<p>本文介绍了 Go 语言中如何查询 HTML 文档的内容。我们探讨了两种不同的方法,分别是使用 golang.org/x/net/html
和 github.com/PuerkitoBio/goquery
2.1 golang.org/x/net/html
사용🎜🎜golang.org/x/net/html
은 Go 언어에서 제공하는 표준 라이브러리로 다음을 제공합니다. HTML 문서를 구문 분석하는 풍부한 API입니다. 다음으로 라이브러리를 사용하여 HTML 문서의 노드 데이터를 쿼리하는 방법을 보여 드리겠습니다. 🎜🎜다음은 간단한 HTML 문서입니다. 🎜rrreee🎜이제 이 문서에 있는 모든 단락 노드(<p>
태그)의 텍스트 콘텐츠를 쿼리하려고 합니다. 먼저 HTML 문서를 DOM 트리 구조로 구문 분석한 다음 DOM 트리를 재귀적으로 순회하여 노드 데이터를 쿼리해야 합니다. 🎜rrreee🎜위 코드에서는 strings.NewReader()
를 사용하여 문자열을 io.Reader 인터페이스 유형으로 변환하고 이를 html.Parse()
함수에 전달하여 HTML 문서를 구문 분석합니다. 그런 다음 DOM 트리를 탐색하고 기준을 충족하는 노드를 찾는 find()
라는 재귀 함수를 정의합니다. 단락 노드가 발견되면 해당 노드의 텍스트 내용을 출력합니다. 마지막으로 find()
함수를 호출하여 모든 단락 노드의 텍스트 내용을 쿼리하고 출력합니다. 🎜🎜2.2 github.com/PuekitoBio/goquery
사용🎜🎜github.com/PuekitoBio/goquery
는 HTML을 구문 분석하고 쿼리하는 인기 있는 Go 언어 라이브러리입니다. 간단하고 편리한 방법. goquery
를 사용하면 DOM 트리의 구조를 깊이 이해하지 않고도 HTML 문서를 탐색하고 쿼리할 수 있습니다. 🎜🎜다음은 샘플 HTML 문서입니다. 🎜rrreee🎜이제 문서에 있는 모든 단락 노드의 텍스트 콘텐츠를 쿼리하려고 합니다. 이는 goquery
를 사용하여 쉽게 수행할 수 있습니다. 🎜rrreee🎜위에서 코드에서는 strings.NewReader()
를 사용합니다. 문자열을 io.Reader 인터페이스 유형으로 변환하고 이를 goquery.NewDocumentFromReader()
함수에 전달하여 HTML 문서를 구문 분석합니다. 그런 다음 doc.Find("p")
를 사용하여 모든 단락 노드를 쿼리하고 s.Text()
메서드를 통해 해당 텍스트 내용을 출력합니다. 🎜🎜3. 요약🎜🎜이 글에서는 Go 언어로 HTML 문서의 내용을 쿼리하는 방법을 소개합니다. 우리는 golang.org/x/net/html
및 github.com/PuerkitoBio/goquery
를 사용하여 두 가지 다른 접근 방식을 탐색했습니다. 이러한 도구는 HTML 문서를 구문 분석할 수 있을 뿐만 아니라 DOM 트리를 탐색하고 조작하기 위한 풍부한 API를 제공합니다. 어떤 방법을 선택하든 HTML 문서에서 데이터를 쉽게 얻을 수 있으므로 더욱 우아하고 효율적인 애플리케이션을 구축하는 데 도움이 됩니다. 🎜위 내용은 골랭 쿼리 HTML의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!