Beautiful Soup-Alternativen für Go

Fortsetzung des Themas „Daten aus HTML extrahieren“

Inhaltsverzeichnis
  • 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:

gopher is cooking soup

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 und HTMLParse, 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.