HTML-Parsing in Go: Überblick über Bibliotheken und Codebeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

HTML-Parsing in Go (Golang): Überblick über Bibliotheken und praktische Beispiele



Go (Golang) ist eine kompilierte, statisch typisierte Sprache, die sich hervorragend für die Erstellung leistungsstarker Web-Scraping-Tools und zum HTML-Parsing eignet. Die integrierte Standardbibliothek net/html bietet einen Low-Level-Tokenizer, aber für die komfortable Arbeit mit dem DOM-Baum und CSS-Selektoren werden häufiger Drittanbieter-Pakete verwendet. In diesem Artikel betrachten wir drei wichtige Werkzeuge: goquery, colly und das Standardpaket net/html. Sie erfahren, wie Sie das passende Werkzeug auswählen, und sehen funktionierende Codebeispiele.



1. Die Standardbibliothek: net/html



Das Paket golang.org/x/net/html bietet einen Tokenizer und Parser für HTML. Es implementiert die HTML5-Spezifikation und ermöglicht das Parsen eines Dokuments in einen Knotenbaum. Dies ist die leichteste und schnellste Option, erfordert jedoch mehr Code für die Navigation.



Beispiel: Extrahieren aller Links (<a href>) von einer Seite:



package main

import ( "fmt" "golang.org/x/net/html" "net/http" "strings")

func main() { resp, _ := http.Get("https://example.com") defer resp.Body.Close()

doc, _ := html.Parse(resp.Body)

var links []string var f func(*html.Node) f = func(n *html.Node) { if n.Type == html.ElementNode && n.Data == "a" { for _, attr := range n.Attr { if attr.Key == "href" { links = append(links, attr.Val) } } } for c := n.FirstChild; c != nil; c = c.NextSibling { f(c) } } f(doc)

fmt.Println(strings.Join(links, ""))}


Vorteile: minimale Abhängigkeiten, hohe Geschwindigkeit.
Nachteile: keine CSS-Selektoren, rekursive Traversierung muss selbst geschrieben werden.



2. goquery — jQuery für Go



goquery ist die beliebteste Bibliothek zum HTML-Parsing in Go. Sie verwendet net/html im Hintergrund und fügt eine jQuery-ähnliche Syntax hinzu. Sie können CSS-Selektoren zur Elementauswahl, Methodenverkettung und DOM-Manipulation nutzen.



Installation:

go get github.com/PuerkitoBio/goquery


Beispiel: Sammeln von Artikelüberschriften von einem Blog:



package main

import ( "fmt" "github.com/PuerkitoBio/goquery" "log" "net/http")

func main() { resp, err := http.Get("https://habr.com/ru/all/") if err != nil { log.Fatal(err) } defer resp.Body.Close()

doc, err := goquery.NewDocumentFromReader(resp.Body) if err != nil { log.Fatal(err) }

doc.Find("article h2").Each(func(i int, s *goquery.Selection) { title := s.Text() link, _ := s.Find("a").Attr("href") fmt.Printf("%d. %s %s", i+1, title, link) })}


Wichtige goquery-Methoden:

  • Find(selector) — Elemente nach CSS-Selektor suchen
  • Each(func) — Iteration über gefundene Elemente
  • Attr(name) — Attributwert abrufen
  • Text() — Textinhalt extrahieren
  • Html() — HTML-Code innerhalb des Elements abrufen


goquery ist ideal für schnelles Prototyping und das Parsen von Seiten mit komplexer Struktur. Beachten Sie jedoch: Es unterstützt keine JavaScript-Ausführung — es ist ein Werkzeug für statisches HTML.



3. Colly — Framework für Web-Scraping



Colly ist ein leistungsstarkes Framework, das nicht nur HTML-Parsing (über goquery), sondern auch die Verwaltung von Anfragewarteschlangen, die Arbeit mit Cookies und Limits umfasst.

Empfehlungen