Alternatives à Beautiful Soup pour Go

Poursuite du sujet sur l'extraction de données à partir du HTML

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

gopher est en train de cuisiner une soupe

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, FindAll et HTMLParse, 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

S'abonner

Recevez de nouveaux articles sur les systèmes, l'infrastructure et l'ingénierie IA.