Alternatives à Beautiful Soup pour Go
Poursuite du sujet sur l'extraction de données à partir du HTML
- Pour un équivalent direct de Beautiful Soup en Go, utilisez soup.
- Pour la prise en charge des sélecteurs CSS, envisagez goquery.
- Pour les requêtes XPath, utilisez htmlquery.
- Pour une autre option inspirée de Beautiful Soup, jetez un œil à Node.
Si vous recherchez un équivalent de Beautiful Soup en Go, plusieurs bibliothèques offrent des fonctionnalités similaires d’analyse et d’extraction de données HTML :

soup
- soup est une bibliothèque Go conçue explicitement comme un analogue de Beautiful Soup en Python. Son API est intentionnellement similaire, avec des fonctions comme
Find,FindAlletHTMLParse, ce qui facilite la transition vers Go pour les développeurs familiers avec Beautiful Soup. - Elle permet de récupérer des pages web, d’analyser le HTML et de parcourir le DOM pour extraire des données, tout comme Beautiful Soup.
- Exemple d’utilisation :
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(), "| Lien :", link.Attrs()["href"]) } - Remarque : soup ne prend pas en charge les sélecteurs CSS ni XPath ; il repose sur la recherche par balises et attributs.
goquery
- goquery est une autre populaire bibliothèque Go pour l’analyse HTML, offrant une syntaxe semblable à jQuery pour le parcours et la manipulation du DOM.
- Il prend en charge les sélecteurs CSS, ce qui le rend plus flexible pour les requêtes complexes par rapport à soup.
- Exemple d’utilisation :
doc, err := goquery.NewDocumentFromReader(resp.Body) doc.Find("div#comicLinks a").Each(func(i int, s *goquery.Selection) { fmt.Println(s.Text(), "| Lien :", s.AttrOr("href", "")) })
Bibliothèque Go htmlquery
htmlquery est une bibliothèque Go conçue pour l’analyse et l’extraction de données de documents HTML à l’aide d’expressions XPath. Elle fournit une API simple pour parcourir et interroger la structure de l’arbre HTML, ce qui la rend particulièrement utile pour les tâches de scraping web et d’extraction de données.
Fonctionnalités clés
- Permet d’interroger des documents HTML avec des expressions XPath 1.0/2.0.
- Prend en charge le chargement de HTML à partir de chaînes, de fichiers ou d’URLs.
- Offre des fonctions pour trouver des nœuds simples ou multiples, extraire des attributs et évaluer des expressions XPath.
- Inclut un cache de requêtes (basé sur LRU) pour améliorer les performances en évitant la compilation répétée des expressions XPath.
- Construit sur les bibliothèques standard de Go pour l’analyse HTML et compatible avec d’autres bibliothèques Go comme goquery.
Exemples d’utilisation basiques
Charger du HTML à partir d’une chaîne :
doc, err := htmlquery.Parse(strings.NewReader("..."))
Charger du HTML à partir d’une URL :
doc, err := htmlquery.LoadURL("http://example.com/")
Trouver tous les éléments `` :
list := htmlquery.Find(doc, "//a")
Trouver tous les éléments `` ayant un attribut href :
list := htmlquery.Find(doc, "//a[@href]")
Extraire le texte du premier élément `` :
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Affiche le texte à l'intérieur de
Extraire toutes les valeurs de l’attribut href des éléments `` :
list := htmlquery.Find(doc, "//a/@href")
for _, n := range list {
fmt.Println(htmlquery.SelectAttr(n, "href"))
}
Cas d’utilisation typiques
- Scraping web où XPath offre des requêtes plus précises ou complexes que les sélecteurs CSS.
- Extraction de données structurées à partir de documents HTML.
- Navigation et manipulation programmatiques des arbres HTML.
Installation
go get github.com/antchfx/htmlquery
Node
- Node est un package Go inspiré de Beautiful Soup, offrant des API pour extraire des données de documents HTML et XML.
Colly
Colly - Un framework de scraping web pour Go, qui utilise goquery en interne pour l’analyse HTML.
https://github.com/gocolly/colly
Pour installer - ajoutez colly à votre fichier go.mod :
module github.com/x/y
go 1.14
require (
github.com/gocolly/colly/v2 latest
)
Exemple :
func main() {
c := colly.NewCollector()
// Trouver et visiter tous les liens
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visite de", r.URL)
})
c.Visit("http://go-colly.org/")
}
Tableau comparatif
| Bibliothèque | Style d’API | Prise en charge des sélecteurs | Inspiration | Notes |
|---|---|---|---|---|
| soup | Type Beautiful Soup | Balises et attributs seulement | Beautiful Soup | Simple, pas de CSS/XPath |
| goquery | Type jQuery | Sélecteurs CSS | jQuery | Flexible, populaire |
| htmlquery | XPath | XPath | lxml/XPath | Requêtes avancées |
| Node | Type Beautiful Soup | Balises et attributs | Beautiful Soup | Similaire à soup |
Résumé
- Pour un équivalent direct de Beautiful Soup en Go, utilisez soup.
- Pour la prise en charge des sélecteurs CSS, envisagez goquery.
- Pour les requêtes XPath, utilisez htmlquery.
- Pour une autre option inspirée de Beautiful Soup, jetez un œil à Node.
Toutes ces bibliothèques exploitent l’analyseur HTML standard de Go, qui est robuste et conforme à la norme HTML5, la principale différence résidant dans le style de l’API et les capacités des sélecteurs.
Liens utiles
- Aide-mémoire Golang
- Correction de l’erreur AutoMigrate postgresql Golang GORM
- Popularité des langages de programmation et des frameworks
- Aide-mémoire Bash
- Génération de PDF en GO - Bibliothèques et exemples
- Hub des outils de développement — aide-mémoires, outils CLI et flux de travail de développement