Parsing HTML en Go (Golang) : bibliothèques et exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Parsing HTML en Go (Golang) : aperçu des outils et exemples



Go (Golang) est un langage de programmation compilé, typé statiquement, développé par Google, idéal pour créer des parseurs et des scrapers web haute performance. Grâce à son support natif de la concurrence (goroutines) et à sa riche bibliothèque standard, Go permet de traiter efficacement des documents HTML de toute complexité. Dans cet article, nous examinerons les principales bibliothèques pour le parsing HTML en Go, leurs fonctionnalités et fournirons des exemples pratiques de code.



Bibliothèque standard : net/html



Le package golang.org/x/net/html est la base pour travailler avec HTML en Go. Il fournit un tokenizer et un parseur qui construit l'arbre DOM du document. C'est un outil de bas niveau offrant un contrôle total sur le processus d'analyse, mais nécessitant plus de code pour les tâches courantes.



Exemple d'utilisation de net/html pour extraire tous les liens d'un document HTML :



package main

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

func main() { htmlContent := `<html><body><a href="/page1">Lien 1</a><a href="/page2">Lien 2</a></body></html>` doc, _ := html.Parse(strings.NewReader(htmlContent)) 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) for _, link := range links { fmt.Println(link) }}


Ce code parcourt récursivement l'arbre DOM, trouve toutes les balises <a> et extrait la valeur de l'attribut href. La méthode est simple et fiable, mais pour des tâches plus complexes (par exemple, la recherche par sélecteurs CSS), il est préférable d'utiliser des bibliothèques spécialisées.



Bibliothèque goquery : jQuery pour Go



github.com/PuerkitoBio/goquery est la bibliothèque la plus populaire pour le parsing HTML en Go. Elle fournit une API rappelant jQuery : sélection d'éléments par sélecteurs CSS, chaînage de méthodes, manipulations du DOM. Cela rend le code concis et lisible.



Installation :

go get github.com/PuerkitoBio/goquery


Exemple de parsing d'une page avec extraction des titres et des liens :



package main

import ( "fmt" "log" "net/http"

"github.com/PuerkitoBio/goquery")

func main() { // Chargement de la page HTML res, err := http.Get("https://example.com") if err != nil { log.Fatal(err) } defer res.Body.Close()

// Parsing du HTML doc, err := goquery.NewDocumentFromReader(res.Body) if err != nil { log.Fatal(err) }

// Extraction des titres h2 doc.Find("h2").Each(func(i int, s *goquery.Selection) { fmt.Printf("Titre %d : %s", i+1, s.Text()) })

// Extraction de tous les liens doc.Find("a").Each(func(i int, s *goquery.Selection) { link, _ := s.Attr("href") text := s.Text() fmt.Printf("Lien %d : %s (%s)", i+1, text, link) })}


Fonctionnalités clés de goquery :

  • Sélecteurs CSS : support de tous les sélecteurs standards (classes, ID, attributs, pseudo-classes).
  • Chaînage de méthodes : Find().Filter().Each() — le code s'écrit comme en jQuery.
  • Extraction de données : méthodes Text(), Html(), Attr().
  • Modification du DOM : SetText(), SetHtml(), Append().


Pour travailler avec de grands volumes de données, goquer

Recommendations