Beautiful Soup-Alternativen für Go
Fortsetzung des Themas „Daten aus HTML extrahieren“
- Für eine direkte Analogie zu Beautiful Soup in Go verwenden Sie soup.
- Für CSS-Selektoren verwenden Sie goquery.
- Für XPath-Abfragen verwenden Sie htmlquery.
- Für eine weitere Beautiful Soup-inspirierte Option schauen Sie sich Node an.
Wenn Sie ein Beautiful Soup-Äquivalent in Go suchen, bieten mehrere Bibliotheken ähnliche Funktionalitäten zur HTML-Verarbeitung und -Auswertung:
soup
- soup ist eine Go-Bibliothek, die explizit als Analogon zu Pythons Beautiful Soup entwickelt wurde. Seine API ist bewusst ähnlich, mit Funktionen wie
Find
,FindAll
undHTMLParse
, was es Entwicklern erleichtert, die mit Beautiful Soup vertraut sind, sich auf Go zu verlagern. - Es ermöglicht das Abrufen von Webseiten, das Parsen von HTML und das Durchlaufen des DOM, um Daten zu extrahieren, ä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 basiert auf der Suche nach Tags und Attributen.
goquery
- goquery ist eine weitere beliebte Go-Bibliothek zur HTML-Verarbeitung, die eine jQuery-ähnliche Syntax für die DOM-Durchlaufs- und -Manipulation bietet.
- Sie unterstützt CSS-Selektoren, was sie im Vergleich zu soup flexibler für komplexe Abfragen macht.
- 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 mithilfe von XPath-Ausdrücken entwickelt wurde. Sie bietet eine einfache API zur Durchlaufs- und Abfrage der HTML-Baumstruktur, was sie besonders für Web-Scraping- und Datenextraktionsaufgaben nützlich macht.
Hauptmerkmale
- Ermöglicht das Abfragen von HTML-Dokumenten mit XPath 1.0/2.0-Ausdrücken.
- Unterstützt das Laden von HTML aus Zeichenfolgen, Dateien oder URLs.
- Bietet Funktionen zum Finden einzelner oder mehrerer Knoten, zum Extrahieren von Attributen und zum Auswerten von XPath-Ausdrücken.
- Enthält Abfrage-Caching (LRU-basiert), um die Leistung zu verbessern, indem wiederholte Kompilierung von XPath-Ausdrücken vermieden werden.
- Wird aufbauend auf den Standard-HTML-Parser-Bibliotheken von Go erstellt und ist mit anderen Go-Bibliotheken wie goquery kompatibel.
Grundlegende Verwendungbeispiele
HTML aus einer Zeichenfolge 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]")
Text des ersten ``-Elements extrahieren:
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Gibt den Text innerhalb aus
Alle Werte des href
-Attributs von ``-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.
- Programmgesteuertes Navigieren und Manipulieren von HTML-Bäumen.
Installation
go get github.com/antchfx/htmlquery
Node
- Node ist ein Go-Paket, das von Beautiful Soup inspiriert ist und APIs für das Extrahieren von Daten aus HTML- und XML-Dokumenten bietet.
Colly
Colly – ein Web-Scraping-Framework für Go, das intern goquery zur HTML-Verarbeitung verwendet.
https://github.com/gocolly/colly
Um zu installieren – 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("Besuchend", r.URL)
})
c.Visit("http://go-colly.org/")
}
Vergleichstabelle
Bibliothek | API-Stil | Selektorunterstützung | Inspiration | Hinweise |
---|---|---|---|---|
soup | Beautiful Soup-ähnlich | Tag & Attribut nur | 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 eine direkte Analogie zu Beautiful Soup in Go verwenden Sie soup.
- Für CSS-Selektorunterstützung verwenden Sie goquery.
- Für XPath-Abfragen verwenden Sie htmlquery.
- Für eine weitere Beautiful Soup-inspirierte Option schauen Sie sich Node an.
Alle diese Bibliotheken nutzen Go’s Standard-HTML-Parser, der robust und HTML5-konform ist, weshalb der Hauptunterschied in der API-Stil und den Selektorfähigkeiten liegt.
Nützliche Links
- PDF in Python generieren – Bibliotheken und Beispiele"
- Golang Cheat Sheet
- AWS Lambda Leistung: JavaScript vs Python vs Golang
- Fehlerbehebung bei Golang GORM AutoMigrate PostgreSQL-Fehler
- Beliebtheit von Programmiersprachen und Frameworks
- Bash Cheat Sheet
- PDF in GO generieren – Bibliotheken und Beispiele"