Alternatives à Beautiful Soup en Go
Poursuivons le sujet de l'extraction de données à partir du HTML
- Pour un équivalent direct de Beautiful Soup en Go, utilisez soup.
- Pour le support des sélecteurs CSS, envisagez goquery.
- Pour les requêtes XPath, utilisez htmlquery.
- Pour une autre option inspirée de Beautiful Soup, consultez Node.
Si vous cherchez un équivalent de Beautiful Soup en Go, plusieurs bibliothèques proposent des fonctionnalités similaires de parsing et de scraping HTML :
soup
- soup est une bibliothèque Go explicitement conçue comme un analogue de Beautiful Soup en Python. Son API est intentionnellement similaire, avec des fonctions comme
Find
,FindAll
etHTMLParse
, ce qui rend facile pour les développeurs familiers avec Beautiful Soup de passer à Go. - Elle vous permet de récupérer des pages web, de parser du 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"]) }
- Note : soup ne prend pas en charge les sélecteurs CSS ou XPath ; elle repose sur la recherche basée sur les balises et les attributs.
goquery
- goquery est une autre bibliothèque populaire en Go pour le parsing HTML, offrant une syntaxe similaire à jQuery pour le parcours et la manipulation du DOM.
- Elle prend en charge les sélecteurs CSS, ce qui la rend plus flexible pour des 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 htmlquery en Go
htmlquery est une bibliothèque Go conçue pour parser et extraire des données à partir de documents HTML en utilisant des expressions XPath. Elle propose une API simple pour parcourir et interroger la structure de l’arbre HTML, ce qui la rend particulièrement utile pour le scraping web et l’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’URL.
- Propose des fonctions pour trouver un ou plusieurs nœuds, 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.
- Construite sur les bibliothèques de parsing HTML standard de Go et compatible avec d’autres bibliothèques Go comme goquery.
Exemples d’utilisation de base
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 `` avec 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
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
- Le scraping web où XPath offre des requêtes plus précises ou complexes que les sélecteurs CSS.
- L’extraction de données structurées à partir de documents HTML.
- La navigation et la manipulation programmatives 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 à partir de documents HTML et XML.
Colly
Colly - Un framework de scraping web pour Go, qui utilise goquery internement pour le parsing 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("Visitant", r.URL)
})
c.Visit("http://go-colly.org/")
}
Tableau de comparaison
Bibliothèque | Style API | Support des sélecteurs | Inspiration | Notes |
---|---|---|---|---|
soup | Similaire à Beautiful Soup | Balises & attributs uniquement | Beautiful Soup | Simple, pas de CSS/XPath |
goquery | Similaire à jQuery | Sélecteurs CSS | jQuery | Flexible, populaire |
htmlquery | XPath | XPath | lxml/XPath | Requêtes avancées |
Node | Similaire à Beautiful Soup | Balises & attributs | Beautiful Soup | Similaire à soup |
Résumé
- Pour un équivalent direct de Beautiful Soup en Go, utilisez soup.
- Pour le support des sélecteurs CSS, envisagez goquery.
- Pour les requêtes XPath, utilisez htmlquery.
- Pour une autre option inspirée de Beautiful Soup, consultez Node.
Toutes ces bibliothèques utilisent le parseur HTML standard de Go qui est robuste et conforme à HTML5, donc la principale différence réside dans le style de l’API et les capacités de sélection.
Liens utiles
- Génération de PDF en Python - Bibliothèques et exemples"
- Feuille de triche Golang
- Performance d’AWS Lambda : JavaScript vs Python vs Golang
- Résolution de l’erreur Golang GORM AutoMigrate PostgreSQL
- Popularité des langages de programmation et des frameworks
- Feuille de triche Bash
- Génération de PDF en GO - Bibliothèques et exemples"