Alternative a Beautiful Soup per Go

Proseguendo l'argomento dell'estrazione dei dati da HTML

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

gopher is cooking soup

soup

  • soup è una libreria Go progettata specificamente come analogo di Beautiful Soup per Python. L’API è intenzionalmente simile, con funzioni come Find, FindAll e HTMLParse, 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
  • 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.