Alternative a Beautiful Soup per Go
Proseguendo l'argomento dell'estrazione dei dati da HTML
- Per un analogo diretto di Beautiful Soup in Go, utilizza soup.
- Per il supporto ai selezionatori CSS, considera goquery.
- Per le query XPath, utilizza htmlquery.
- Per un’alternativa ispirata a Beautiful Soup, guarda a Node.
Se stai cercando un equivalente di Beautiful Soup in Go, diverse librerie offrono funzionalità simili per l’analisi e lo scraping HTML:
soup
- soup è una libreria Go progettata specificamente come analogo di Beautiful Soup per Python. L’API è intenzionalmente simile, con funzioni come
Find
,FindAll
eHTMLParse
, rendendola facile da utilizzare per gli sviluppatori familiari con Beautiful Soup. - Permette di recuperare pagine web, analizzare HTML e navigare nel 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 selezionatori CSS o XPath; si basa sulla ricerca basata su tag e attributi.
goquery
- goquery è un’altra libreria popolare per l’analisi HTML in Go, che offre una sintassi simile a jQuery per la navigazione e la manipolazione del DOM.
- Supporta i selezionatori 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", "")) })
htmlquery Go Library
htmlquery è una libreria Go progettata per l’analisi e l’estrazione di dati da documenti HTML utilizzando espressioni XPath. Fornisce un’API semplice per navigare e interrogare la struttura dell’albero HTML, rendendola particolarmente utile per lo scraping web e l’estrazione di dati.
Funzionalità principali
- Permette 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 singoli o multipli nodi, estrarre attributi e valutare espressioni XPath.
- Include il caching delle query (basato su LRU) per migliorare le prestazioni evitando la compilazione ripetuta delle espressioni XPath.
- Costruita sopra le librerie standard di analisi HTML di Go e compatibile con altre librerie Go come goquery.
Esempi di utilizzo base
Carica HTML da una stringa:
doc, err := htmlquery.Parse(strings.NewReader("..."))
Carica HTML da un URL:
doc, err := htmlquery.LoadURL("http://example.com/")
Trova tutti gli elementi ``:
list := htmlquery.Find(doc, "//a")
Trova tutti gli elementi `` con un attributo href
:
list := htmlquery.Find(doc, "//a[@href]")
Estrai il testo del primo elemento ``:
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Output del testo all'interno
Estrai 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
- Scraping web dove XPath offre query più precise o complesse rispetto ai selezionatori 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 pacchetto Go ispirato a Beautiful Soup, che fornisce API per l’estrazione di dati da documenti HTML e XML.
Colly
Colly - Un framework per lo scraping web in Go, che utilizza internamente goquery 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 selezionatori | Ispirazione | Note |
---|---|---|---|---|
soup | Simile a Beautiful Soup | Solo tag & attributi | Beautiful Soup | Semplice, senza CSS/XPath |
goquery | Simile a jQuery | Selezione CSS | jQuery | Flessibile, popolare |
htmlquery | XPath | XPath | lxml/XPath | Query avanzate |
Node | Simile a Beautiful Soup | Solo tag & attributi | Beautiful Soup | Simile a soup |
Riepilogo
- Per un analogo diretto di Beautiful Soup in Go, utilizza soup.
- Per il supporto ai selezionatori CSS, considera goquery.
- Per le query XPath, utilizza htmlquery.
- Per un’alternativa ispirata a Beautiful Soup, guarda a Node.
Tutte queste librerie sfruttano il Go’s parser HTML standard, che è robusto e conforme a HTML5, quindi la principale differenza risiede nello stile dell’API e nelle capacità di selezione.
Link utili
- Generazione di PDF in Python - librerie ed esempi"
- Cheat Sheet di Golang
- Prestazioni di AWS Lambda: JavaScript vs Python vs Golang
- Risolvere l’errore di Golang GORM AutoMigrate per PostgreSQL
- Popolarità dei linguaggi di programmazione e framework
- Cheat Sheet di Bash
- Generazione di PDF in GO - librerie ed esempi"