Schöne-Suppe-Alternativen für Go
Fortsetzung des Themas zur Datenextraktion aus HTML
- Für ein direktes Beautiful-Soup-Äquivalent in Go, nutzen Sie soup.
- Für CSS-Selektor-Unterstützung, erwägen Sie goquery.
- Für XPath-Abfragen, nutzen Sie htmlquery.
- Für eine weitere von Beautiful Soup inspirierte Option, werfen Sie einen Blick auf Node.
Wenn Sie nach einem Beautiful-Soup-Äquivalent in Go suchen, bieten mehrere Bibliotheken ähnliche Funktionen für das Parsen und Scraping von HTML:

soup
- soup ist eine Go-Bibliothek, die explizit als Analogon zu Pythons Beautiful Soup konzipiert wurde. Ihre API ist absichtlich ähnlich gestaltet und bietet Funktionen wie
Find,FindAllundHTMLParse, was es für Entwickler, die mit Beautiful Soup vertraut sind, leicht macht, den Übergang zu Go zu schaffen. - Sie ermöglicht es Ihnen, Webseiten abzurufen, HTML zu parsen und den DOM zu durchsuchen, um Daten zu extrahieren, ganz ähnlich wie Beautiful Soup.
- Beispielhafte Verwendung:
resp, err := soup.Get("https://xkcd.com") if err != nil { os.Exit(1) } doc := soup.HTMLParse(resp) links := doc.Find("div", "id", "comicLinks").FindAll("a") for _, link := range links { fmt.Println(link.Text(), "| Link :", link.Attrs()["href"]) } - Hinweis: soup unterstützt keine CSS-Selektoren oder XPath; es stützt sich auf die Suche nach Tags und Attributen.
goquery
- goquery ist eine weitere beliebte Go-Bibliothek für das Parsen von HTML, die eine jQuery-ähnliche Syntax für die DOM-Durchsuchung und -Manipulation bietet.
- Sie unterstützt CSS-Selektoren, was sie für komplexe Abfragen flexibler macht als soup.
- Beispielhafte Verwendung:
doc, err := goquery.NewDocumentFromReader(resp.Body) doc.Find("div#comicLinks a").Each(func(i int, s *goquery.Selection) { fmt.Println(s.Text(), "| Link :", s.AttrOr("href", "")) })
htmlquery Go-Bibliothek
htmlquery ist eine Go-Bibliothek, die für das Parsen und Extrahieren von Daten aus HTML-Dokumenten mit XPath-Ausdrücken konzipiert wurde. Sie bietet eine unkomplizierte API für die Durchsuchung und Abfrage der HTML-Baumstruktur, was sie besonders nützlich für Web-Scraping- und Datenextraktionsaufgaben macht.
Hauptmerkmale
- Ermöglicht das Abfragen von HTML-Dokumenten mit XPath 1.0/2.0-Ausdrücken.
- Unterstützt das Laden von HTML aus Strings, Dateien oder URLs.
- Bietet Funktionen zum Finden einzelner oder mehrerer Knoten, zum Extrahieren von Attributen und zur Auswertung von XPath-Ausdrücken.
- Enthält ein Query-Caching (LRU-basiert), um die Leistung zu verbessern, indem die wiederholte Kompilierung von XPath-Ausdrücken vermieden wird.
- Basiert auf Go’s Standard-HTML-Parsing-Bibliotheken und ist mit anderen Go-Bibliotheken wie goquery kompatibel.
Beispiele für die Grundlegende Verwendung
HTML aus einem String laden:
doc, err := htmlquery.Parse(strings.NewReader("..."))
HTML aus einer URL laden:
doc, err := htmlquery.LoadURL("http://example.com/")
Alle ``-Elemente finden:
list := htmlquery.Find(doc, "//a")
Alle ``-Elemente mit einem href-Attribut finden:
list := htmlquery.Find(doc, "//a[@href]")
Den Text des ersten ``-Elements extrahieren:
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Gibt den Text innerhalb von aus
Alle Werte des href-Attributs aus ``-Elementen extrahieren:
list := htmlquery.Find(doc, "//a/@href")
for _, n := range list {
fmt.Println(htmlquery.SelectAttr(n, "href"))
}
Typische Anwendungsfälle
- Web-Scraping, bei dem XPath präzisere oder komplexere Abfragen als CSS-Selektoren ermöglicht.
- Extrahieren strukturierter Daten aus HTML-Dokumenten.
- Programmgesteuerte Navigation und Manipulation von HTML-Bäumen.
Installation
go get github.com/antchfx/htmlquery
Node
- Node ist ein von Beautiful Soup inspiriertes Go-Paket, das APIs für die Datenextraktion aus HTML- und XML-Dokumenten bereitstellt.
Colly
Colly – Ein Web-Scraping-Framework für Go, das intern goquery für das HTML-Parsing verwendet.
https://github.com/gocolly/colly
Zur Installation – fügen Sie colly zu Ihrer go.mod-Datei hinzu:
module github.com/x/y
go 1.14
require (
github.com/gocolly/colly/v2 latest
)
Beispiel:
func main() {
c := colly.NewCollector()
// Finden und Besuchen aller Links
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("Besuche", r.URL)
})
c.Visit("http://go-colly.org/")
}
Vergleichstabelle
| Bibliothek | API-Stil | Selektor-Unterstützung | Inspiration | Hinweise |
|---|---|---|---|---|
| soup | Beautiful-Soup-ähnlich | Nur Tag & Attribut | Beautiful Soup | Einfach, kein CSS/XPath |
| goquery | jQuery-ähnlich | CSS-Selektoren | jQuery | Flexibel, beliebt |
| htmlquery | XPath | XPath | lxml/XPath | Fortgeschrittene Abfragen |
| Node | Beautiful-Soup-ähnlich | Tag & Attribut | Beautiful Soup | Ähnlich wie soup |
Zusammenfassung
- Für ein direktes Beautiful-Soup-Äquivalent in Go, nutzen Sie soup.
- Für CSS-Selektor-Unterstützung, erwägen Sie goquery.
- Für XPath-Abfragen, nutzen Sie htmlquery.
- Für eine weitere von Beautiful Soup inspirierte Option, werfen Sie einen Blick auf Node.
All diese Bibliotheken nutzen den Go-Standard-HTML-Parser, der robust und HTML5-konform ist. Der Hauptunterschied liegt also im API-Stil und den Selektor-Möglichkeiten.