Heim  >  Artikel  >  Backend-Entwicklung  >  Golang-Abfrage-HTML

Golang-Abfrage-HTML

WBOY
WBOYOriginal
2023-05-19 10:46:07675Durchsuche

Vorwort

Die Entwicklung von Programmiersprachen hat uns unendliche Möglichkeiten eröffnet. Als moderne Programmiersprache bietet die Go-Sprache viele Vorteile wie Effizienz, Einfachheit und Cross-Plattform. Sie wird häufig in der serverseitigen Programmierung, im Cloud Computing, in Containern und anderen Bereichen eingesetzt. In diesem Artikel wird erläutert, wie Sie Bibliotheken von Drittanbietern zum Abfragen von HTML-Dokumenten in Go verwenden.

1. Go-Sprache und HTML

HTML ist eine Auszeichnungssprache, die zum Erstellen von Webseiten verwendet wird. Es kann die Struktur und den Stil von Elementen festlegen und mit anderen Technologien wie CSS und JavaScript verwendet werden, um komplexe interaktive Effekte zu erzielen. Die Go-Sprache ist eine kompilierte, statisch typisierte, nebenläufigkeitssichere Programmiersprache, die für ihre Effizienz bekannt ist. Obwohl die Go-Sprache selbst das HTML-Parsen nicht direkt unterstützt, können wir diese Aufgabe mithilfe von Bibliotheken von Drittanbietern erfüllen.

2. HTML-Analyse in der Go-Sprache

In der Go-Sprache können wir eine Vielzahl von Tools zum Parsen von HTML-Dokumenten verwenden, wie zum Beispiel golang.org/x/net/html, github .com/PuerkitoBio/goqueryetc. Diese Tools stellen eine Reihe von Methoden und Strukturen zum Parsen, Durchlaufen und Ändern von HTML-Dokumenten bereit. 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 Verwendung golang.org/x/net/html🎜🎜golang.org/x/net/html ist eine Standardbibliothek, die von der Go-Sprache bereitgestellt wird Eine umfangreiche API zum Parsen von HTML-Dokumenten. Als Nächstes demonstrieren wir, wie Sie die Bibliothek verwenden, um Knotendaten in einem HTML-Dokument abzufragen. 🎜🎜Das Folgende ist ein einfaches HTML-Dokument: 🎜rrreee🎜Wir wollen nun den Textinhalt aller Absatzknoten (e388a4556c0f65e1904146cc1a846bee-Tags) in diesem Dokument abfragen. Zuerst müssen wir das HTML-Dokument in eine DOM-Baumstruktur analysieren und dann die Knotendaten abfragen, indem wir den DOM-Baum rekursiv durchlaufen. 🎜rrreee🎜Im obigen Code verwenden wir strings.NewReader(), um den String in den Schnittstellentyp io.Reader zu konvertieren und ihn an die Funktion html.Parse() zu übergeben HTML-Dokumente analysieren. Dann definieren wir eine rekursive Funktion namens find(), die den DOM-Baum durchläuft und Knoten findet, die die Kriterien erfüllen. Wenn ein Absatzknoten gefunden wird, geben wir den Textinhalt dieses Knotens aus. Abschließend rufen wir die Funktion find() auf, um den Textinhalt aller Absatzknoten abzufragen und auszugeben. 🎜🎜2.2 Verwendung von github.com/PuekitoBio/goquery🎜🎜github.com/PuerkitoBio/goquery ist eine beliebte Go-Sprachbibliothek, die HTML analysiert und abfragt. Bietet eine einfache und bequeme Möglichkeit Weg. Wir können goquery verwenden, um HTML-Dokumente zu durchlaufen und abzufragen, ohne die Struktur des DOM-Baums verstehen zu müssen. 🎜🎜Das Folgende ist ein Beispiel-HTML-Dokument: 🎜rrreee🎜Wir wollen nun den Textinhalt aller Absatzknoten im Dokument abfragen, was leicht mit goquery erreicht werden kann: 🎜rrreee🎜Im obigen Beispiel Code verwenden wir strings.NewReader() Konvertiert den String in den Schnittstellentyp io.Reader und übergibt ihn an die Funktion goquery.NewDocumentFromReader(), um das HTML-Dokument zu analysieren. Dann verwenden wir doc.Find("p"), um alle Absatzknoten abzufragen und ihren Textinhalt über die Methode s.Text() auszugeben. 🎜🎜3. Zusammenfassung🎜🎜In diesem Artikel wird erläutert, wie der Inhalt von HTML-Dokumenten in der Go-Sprache abgefragt wird. Wir haben zwei verschiedene Ansätze untersucht, nämlich golang.org/x/net/html und github.com/PuerkitoBio/goquery. Diese Tools können nicht nur HTML-Dokumente analysieren, sondern bieten auch eine umfangreiche API zum Durchlaufen und Bearbeiten des DOM-Baums. Unabhängig davon, für welche Methode Sie sich entscheiden, können Sie problemlos Daten aus HTML-Dokumenten abrufen und so elegantere und effizientere Anwendungen erstellen. 🎜

Das obige ist der detaillierte Inhalt vonGolang-Abfrage-HTML. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Golang implementiert atoiNächster Artikel:Golang implementiert atoi