Alternative a Beautiful Soup per Go
Proseguendo l’argomento sull’estrazione dei dati da HTML
- Per un equivalente diretto di Beautiful Soup in Go, utilizza soup.
- Per il supporto ai selettori CSS, valuta goquery.
- Per le query XPath, usa htmlquery.
- Per un’altra opzione ispirata a Beautiful Soup, dai un’occhiata a Node.
Se stai cercando un equivalente di Beautiful Soup in Go, diverse librerie offrono funzionalità simili di analisi e scraping HTML:

soup
- soup è una libreria Go progettata esplicitamente come analogo di Beautiful Soup di Python. La sua API è intenzionalmente simile, includendo funzioni come
Find,FindAlleHTMLParse, il che rende facile per gli sviluppatori già esperti di Beautiful Soup passare a Go. - Consente di recuperare pagine web, analizzare HTML e navigare nell’albero DOM per estrarre dati, proprio come Beautiful Soup.
- Esempio di utilizzo:
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(), "| Link :", link.Attrs()["href"]) } - Nota: soup non supporta i selettori CSS né XPath; si basa sulla ricerca basata su tag e attributi.
goquery
- goquery è un’altra popolare libreria Go per l’analisi HTML, che offre una sintassi simile a jQuery per la navigazione e la manipolazione del DOM.
- Supporta i selettori CSS, rendendola più flessibile per query complesse rispetto a soup.
- Esempio di utilizzo:
doc, err := goquery.NewDocumentFromReader(resp.Body) doc.Find("div#comicLinks a").Each(func(i int, s *goquery.Selection) { fmt.Println(s.Text(), "| Link :", s.AttrOr("href", "")) })
Libreria htmlquery per Go
htmlquery è una libreria Go progettata per analizzare ed estrarre dati da documenti HTML utilizzando espressioni XPath. Fornisce un’API semplice per navigare e interrogare la struttura dell’albero HTML, rendendola particolarmente utile per attività di web scraping ed estrazione di dati.
Caratteristiche principali
- Consente di interrogare documenti HTML con espressioni XPath 1.0/2.0.
- Supporta il caricamento di HTML da stringhe, file o URL.
- Offre funzioni per trovare nodi singoli o multipli, estrarre attributi e valutare espressioni XPath.
- Include una cache per le query (basata su LRU) per migliorare le prestazioni evitando la ricompilazione ripetuta delle espressioni XPath.
- Si basa sulle librerie standard di analisi HTML di Go ed è compatibile con altre librerie Go come goquery.
Esempi di utilizzo base
Caricare HTML da una stringa:
doc, err := htmlquery.Parse(strings.NewReader("..."))
Caricare HTML da un URL:
doc, err := htmlquery.LoadURL("http://example.com/")
Trovare tutti gli elementi ``:
list := htmlquery.Find(doc, "//a")
Trovare tutti gli elementi `` con un attributo href:
list := htmlquery.Find(doc, "//a[@href]")
Estrarre il testo del primo elemento ``:
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Stampa il testo interno
Estrarre tutti i valori dell’attributo href dagli elementi ``:
list := htmlquery.Find(doc, "//a/@href")
for _, n := range list {
fmt.Println(htmlquery.SelectAttr(n, "href"))
}
Casi d’uso tipici
- Web scraping in cui XPath fornisce interrogazioni più precise o complesse rispetto ai selettori CSS.
- Estrazione di dati strutturati da documenti HTML.
- Navigazione e manipolazione programmatica degli alberi HTML.
Installazione
go get github.com/antchfx/htmlquery
Node
- Node è un package Go ispirato a Beautiful Soup, che fornisce API per estrarre dati da documenti HTML e XML.
Colly
Colly - Un framework per il web scraping in Go, che utilizza goquery internamente per l’analisi HTML.
https://github.com/gocolly/colly
Per installare, aggiungi colly al tuo file go.mod:
module github.com/x/y
go 1.14
require (
github.com/gocolly/colly/v2 latest
)
Esempio:
func main() {
c := colly.NewCollector()
// Trova e visita tutti i link
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visiting", r.URL)
})
c.Visit("http://go-colly.org/")
}
Tabella di confronto
| Libreria | Stile API | Supporto Selettori | Ispirazione | Note |
|---|---|---|---|---|
| soup | Simile a Beautiful Soup | Solo tag e attributi | Beautiful Soup | Semplice, senza CSS/XPath |
| goquery | Simile a jQuery | Selettori CSS | jQuery | Flessibile, popolare |
| htmlquery | XPath | XPath | lxml/XPath | Query avanzate |
| Node | Simile a Beautiful Soup | Tag e attributi | Beautiful Soup | Simile a soup |
Riepilogo
- Per un equivalente diretto di Beautiful Soup in Go, utilizza soup.
- Per il supporto ai selettori CSS, valuta goquery.
- Per le query XPath, usa htmlquery.
- Per un’altra opzione ispirata a Beautiful Soup, dai un’occhiata a Node.
Tutte queste librerie sfruttano l’parser HTML standard di Go, che è robusto e conforme a HTML5, quindi la differenza principale risiede nello stile dell’API e nelle capacità dei selettori.