Parsing HTML en Go : aperçu des 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 bibliothèques et exemples pratiques



Go (Golang) est un langage compilé, typé statiquement, idéal pour créer des outils performants de web scraping et de parsing HTML. La bibliothèque standard intégrée net/html fournit un tokenizer de bas niveau, mais pour travailler confortablement avec l'arbre DOM et les sélecteurs CSS, on utilise souvent des paquets tiers. Dans cet article, nous allons examiner trois outils clés : goquery, colly et le paquet standard net/html. Vous apprendrez à choisir l'outil adapté et verrez des exemples de code fonctionnels.



1. Bibliothèque standard : net/html



Le paquet golang.org/x/net/html fournit un tokenizer et un analyseur HTML. Il implémente la spécification HTML5 et permet d'analyser un document en un arbre de nœuds. C'est l'option la plus légère et la plus rapide, mais elle nécessite d'écrire plus de code pour la navigation.



Exemple : extraction de tous les liens (<a href>) d'une page :



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, ""))}


Avantages : dépendances minimales, grande vitesse.
Inconvénients : pas de sélecteurs CSS, nécessité d'écrire des parcours récursifs.



2. goquery — jQuery pour Go



goquery est la bibliothèque la plus populaire pour le parsing HTML en Go. Elle utilise net/html en interne et ajoute une syntaxe similaire à jQuery. Vous pouvez utiliser des sélecteurs CSS pour trouver des éléments, des chaînages d'appels et manipuler le DOM.



Installation :

go get github.com/PuerkitoBio/goquery


Exemple : collecte des titres d'articles d'un 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) })}


Méthodes principales de goquery :

  • Find(selector) — recherche d'éléments par sélecteur CSS
  • Each(func) — itération sur les éléments trouvés
  • Attr(name) — obtention de la valeur d'un attribut
  • Text() — extraction du contenu textuel
  • Html() — obtention du code HTML à l'intérieur de l'élément


goquery est idéal pour le prototypage rapide et le parsing de pages à structure complexe. Cependant, rappelez-vous : il ne supporte pas l'exécution de JavaScript — c'est un outil pour le HTML statique.



3. Colly — framework pour le web scraping



Colly est un framework puissant qui inclut non seulement le parsing HTML (via goquery), mais aussi la gestion de la file d'attente des requêtes, le travail avec les cookies, les limites

Recommendations