>  기사  >  백엔드 개발  >  골랭 쿼리 HTML

골랭 쿼리 HTML

WBOY
WBOY원래의
2023-05-19 10:46:07675검색

머리말

프로그래밍 언어의 발전은 우리에게 무한한 가능성을 가져다 주었습니다. 현대 프로그래밍 언어로서 Go 언어는 효율성, 단순성, 크로스 플랫폼 등 많은 장점을 가지고 있으며 서버 측 프로그래밍, 클라우드 컴퓨팅, 컨테이너 및 기타 분야에서 널리 사용됩니다. 이 기사에서는 타사 라이브러리를 사용하여 Go에서 HTML 문서를 쿼리하는 방법을 소개합니다.

1. Go 언어와 HTML

HTML은 웹 페이지를 만드는 데 사용되는 마크업 언어입니다. 요소의 구조와 스타일을 지정하고 CSS 및 JavaScript와 같은 다른 기술과 함께 사용하여 복잡한 대화형 효과를 얻을 수 있습니다. Go 언어는 컴파일되고 정적으로 유형이 지정되며 효율성이 뛰어난 동시성 안전 프로그래밍 언어입니다. Go 언어 자체는 HTML 구문 분석을 직접 지원하지 않지만 타사 라이브러리를 사용하여 이 작업을 수행할 수 있습니다.

2. Go 언어의 HTML 구문 분석

Go 언어에서는 golang.org/x/net/html, github과 같은 다양한 도구를 사용하여 HTML 문서를 구문 분석할 수 있습니다. .com/PuerkitoBio/goquery 등. 이러한 도구는 HTML 문서를 구문 분석, 탐색 및 수정하기 위한 일련의 방법과 구조를 제공합니다. golang.org/x/net/htmlgithub.com/PuerkitoBio/goquery等。这些工具提供了一系列方法和结构,用于解析、遍历和修改 HTML 文档。

2.1 使用 golang.org/x/net/html

golang.org/x/net/html 是 Go 语言提供的一个标准的库,它提供了一个丰富的 API 来解析 HTML 文档。接下来,我们将演示如何使用该库来查询 HTML 文档中的节点数据。

下面是一个简单的 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>

我们现在要查询该文档中的所有段落节点(e388a4556c0f65e1904146cc1a846bee 标签)的文本内容。首先,我们需要将 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() 函数来查询并输出所有段落节点的文本内容。

2.2 使用 github.com/PuerkitoBio/goquery

github.com/PuerkitoBio/goquery 是一个很受欢迎的 Go 语言库,它为 HTML 解析和查询提供了一种简单且方便的方式。我们可以使用 goquery 来遍历并查询 HTML 文档,而无需深入了解 DOM 树的结构。

下面是一个示例 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() 方法来输出其文本内容。

三、总结

本文介绍了 Go 语言中如何查询 HTML 文档的内容。我们探讨了两种不同的方法,分别是使用 golang.org/x/net/htmlgithub.com/PuerkitoBio/goquery

2.1 golang.org/x/net/html 사용🎜🎜golang.org/x/net/html은 Go 언어에서 제공하는 표준 라이브러리로 다음을 제공합니다. HTML 문서를 구문 분석하는 풍부한 API입니다. 다음으로 라이브러리를 사용하여 HTML 문서의 노드 데이터를 쿼리하는 방법을 보여 드리겠습니다. 🎜🎜다음은 간단한 HTML 문서입니다. 🎜rrreee🎜이제 이 문서에 있는 모든 단락 노드(e388a4556c0f65e1904146cc1a846bee 태그)의 텍스트 콘텐츠를 쿼리하려고 합니다. 먼저 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/htmlgithub.com/PuerkitoBio/goquery를 사용하여 두 가지 다른 접근 방식을 탐색했습니다. 이러한 도구는 HTML 문서를 구문 분석할 수 있을 뿐만 아니라 DOM 트리를 탐색하고 조작하기 위한 풍부한 API를 제공합니다. 어떤 방법을 선택하든 HTML 문서에서 데이터를 쉽게 얻을 수 있으므로 더욱 우아하고 효율적인 애플리케이션을 구축하는 데 도움이 됩니다. 🎜

위 내용은 골랭 쿼리 HTML의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.