Go:
Analisi del HTML
Come fare:
Per analizzare l’HTML in Go, si utilizza tipicamente il pacchetto goquery o il pacchetto della libreria standard net/html. Ecco un esempio base che utilizza net/html per estrarre tutti i link da una pagina web:
package main
import (
"fmt"
"golang.org/x/net/html"
"net/http"
)
func main() {
// Ottenere il documento HTML
res, err := http.Get("http://example.com")
if err != nil {
panic(err)
}
defer res.Body.Close()
// Analizzare il documento HTML
doc, err := html.Parse(res.Body)
if err != nil {
panic(err)
}
// Funzione per attraversare ricorsivamente il DOM
var f func(*html.Node)
f = func(n *html.Node) {
if n.Type == html.ElementNode && n.Data == "a" {
for _, a := range n.Attr {
if a.Key == "href" {
fmt.Println(a.Val)
break
}
}
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
f(c)
}
}
// Attraversare il DOM
f(doc)
}Output di esempio (assumendo che http://example.com contenga due link):
http://www.iana.org/domains/example
http://www.iana.org/domains/reservedQuesto codice richiede una pagina HTML, la analizza e attraversa ricorsivamente il DOM per trovare e stampare gli attributi href di tutti i tag <a>.
Approfondimento
Il pacchetto net/html fornisce le basi per l’analisi dell’HTML in Go, implementando direttamente gli algoritmi di tokenizzazione e costruzione dell’albero specificati dallo standard HTML5. Questo approccio di basso livello è potente ma può risultare verboso per compiti complessi.
Al contrario, il pacchetto di terze parti goquery, ispirato a jQuery, offre un’interfaccia di livello superiore che semplifica la manipolazione e l’attraversamento del DOM. Consente agli sviluppatori di scrivere codice conciso ed espressivo per compiti come la selezione di elementi, l’estrazione di attributi e la manipolazione dei contenuti.
Tuttavia, la comodità di goquery comporta il costo di una dipendenza aggiuntiva e potenzialmente prestazioni più lente a causa del suo strato di astrazione. La scelta tra net/html e goquery (o altre librerie di analisi) dipende dai requisiti specifici del progetto, come la necessità di ottimizzazione delle prestazioni o la facilità d’uso.
Storicamente, l’analisi dell’HTML in Go è evoluta dalle operazioni di base sulle stringhe alla sofisticata manipolazione degli alberi DOM, riflettendo la crescita dell’ecosistema del linguaggio e la domanda della comunità per robusti strumenti di scraping web e estrazione di dati. Nonostante le capacità native, la prevalenza di librerie di terze parti come goquery evidenzia la preferenza della comunità Go per codice modulare e riutilizzabile. Tuttavia, per applicazioni critiche per le prestazioni, i programmatori potrebbero ancora preferire il pacchetto net/html o persino ricorrere a regex per semplici compiti di analisi, tenendo presente i rischi e i limiti intrinseci dell’analisi HTML basata su regex.