Come analizzare e generare codice HTML in Go
Il parsing sta analizzando e interpretando la struttura di un documento. Il processo di analisi può includere l’estrazione di elementi, attributi o dati specifici dal documento e la verifica che il documento sia ben formattato pur seguendo standard o regole specifici. L’analisi viene utilizzata principalmente per estrarre dati da pagine Web o manipolare la struttura delle pagine Web prima di mostrarle agli utenti.
Go fornisce pacchetti per lavorare con i documenti, inclusi i formati HTML e XML comunemente usati nelle pagine web. Il pacchetto html fornisce funzioni per la tokenizzazione e l’analisi dell’HTML.
Il pacchetto HTML
Il pacchetto html fornisce un tokenizer e un parser conformi a HTML5 per l’analisi e la manipolazione di documenti HTML, l’attraversamento dell’albero di analisi e la manipolazione della struttura ad albero. Il pacchetto html è un pacchetto integrato della libreria standard di Go.
Una delle caratteristiche principali del pacchetto html è la funzione Parse che può analizzare i documenti HTML e restituire il nodo radice dell’albero di analisi, da cui è possibile utilizzare funzioni come FirstChild e NextSibling per navigare nell’albero ed estrarre informazioni dal documento. Il pacchetto fornisce anche la funzione ParseFragment per l’analisi di frammenti di documenti HTML.
La funzione EscapeString è utile per eseguire l’escape di caratteri speciali nelle stringhe per un’inclusione più sicura in HTML; è possibile utilizzare questa funzione per prevenire gli attacchi XSS (cross-site scripting) convertendo i caratteri speciali nelle entità HTML corrispondenti.
Per iniziare con il pacchetto html , puoi importare il pacchetto nei file del tuo progetto Go.
import "golang.org/x/net/html"
Il pacchetto html non fornisce alcuna funzione per la generazione di HTML. Invece, puoi usare il pacchetto html/template, che offre una serie di funzioni per la generazione di modelli HTML. Il pacchetto html/template fornisce una funzione template.HTMLEscape per scrivere versioni con escape di HTML in uno scrittore di risposte.
Anche il pacchetto html/template fa parte della libreria standard ed ecco come importare il pacchetto.
import "html/template"
Il pacchetto html è il pacchetto di template più utilizzato nell’ecosistema Go e supporta varie operazioni e tipi di dati.
Analisi dell’HTML in Go
La funzione Parse del pacchetto html aiuta con l’analisi di testo e documenti HTML. La funzione Parse accetta un’istanza io.Reader poiché è un primo argomento contenente il documento file e un’istanza * html.Node , che è il nodo radice del documento HTML
Ecco come puoi usare la funzione Parse per analizzare una pagina web e restituire tutti gli URL sulla pagina web.
import (
"fmt"
"golang.org/x/net/html"
"net/http"
)
func main() {
// Send an HTTP GET request to the example.com web page
resp, err: = http.Get("https://www.example.com")
if err! = nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
// Use the html package to parse the response body from the request
doc, err: = html.Parse(resp.Body)
if err! = nil {
fmt.Println("Error:", err)
return
}
// Find and print all links on the web page
var links []string
var link func(*html.Node)
link = func(n *html.Node) {
if n.Type == html.ElementNode && n.Data == "a" {
for _, a: = range n.Attr {
if a.Key == "href" {
// adds a new link entry when the attribute matches
links = append(links, a.Val)
}
}
}
// traverses the HTML of the webpage from the first child node
for c: = n.FirstChild; c! = nil; c = c.NextSibling {
link(c)
}
}
link(doc)
// loops through the links slice
for _, l: = range links {
fmt.Println("Link:", l)
}
}
La funzione principale invia una richiesta HTTP GET al sito Web con la funzione Get del pacchetto http e recupera il corpo della risposta della pagina. La funzione Parse del pacchetto html analizza il corpo della risposta e restituisce il documento HTML.
La variabile link è la porzione di stringhe che conterrà gli URL della pagina web. La funzione link accetta il riferimento del puntatore al metodo Node per il pacchetto html e il metodo Key dell’istanza dell’attributo dal nodo restituisce i dati contenuti in un attributo specificato (in questo caso, href ). La funzione attraversa il documento con il metodo NextSibling dal nodo FirstChild per stampare ogni URL sulla pagina web. Infine, il ciclo for stampa tutti gli URL dalla slice dei link .
Ecco il risultato dell’operazione.
Generazione di codice HTML in Go
Il pacchetto html/template fornisce un insieme di funzioni per l’analisi e l’esecuzione sicure ed efficienti di modelli HTML. Il pacchetto è progettato per essere utilizzato insieme al pacchetto html , che fornisce funzioni per l’analisi e la manipolazione dell’HTML.
Puoi generare codice HTML per il rendering lato server con il pacchetto html/template . La generazione di HTML è utile per molti casi d’uso come l’invio di e-mail, il rendering frontend lato server e molti altri. Puoi utilizzare i tipi di dati Go incorporati come mappe e strutture per interagire e manipolare l’HTML della tua pagina web.
Dovrai comprendere la sintassi dei modelli di Go HTML per generare correttamente l’HTML con il pacchetto html/template .
import (
"html/template"
"os"
)
type webPage struct {
Title string
Heading string
Text string
}
func main() {
// Define the template
tmpl: = `
<!DOCTYPE html>
<html>
<head>
<title>{{.Title}}</title>
</head>
<body>
<h1>{{.Heading}}</h1>
<p>{{.Text}}</p>
</body>
</html>`
// Define the data to be used in the template
web: = webPage{
Title: "An Example Page",
Heading: "Welcome to my website!",
Text: "This is the home page of my website.",
}
// Create a new template and parse the template string
t, err: = template.New("webpage").Parse(tmpl)
if err! = nil {
panic(err)
}
// Execute the template and write the result to stdout
err = t.Execute(os.Stdout, web)
if err! = nil {
panic(err)
}
}
La variabile tmpl contiene la stringa HTML. La stringa HTML utilizza la sintassi dei modelli Go per definire il titolo della pagina, un’intestazione h1 e un paragrafo di testo. Lo struct webPage definisce i campi dati per la pagina web con i campi Title , Heading e Text .
Il metodo Parse della funzione New del pacchetto modello crea e analizza un nuovo modello con la stringa del modello. La funzione Execute della nuova istanza del modello esegue il modello con i dati dell’istanza struct e restituisce il risultato all’output standard (in questo caso, stampa il risultato nella console).
Crea applicazioni Web con Go
Imparare l’analisi e la generazione di HTML con Go è un passo nella giusta direzione verso la creazione di applicazioni Web più sofisticate con Go. Puoi utilizzare framework come Gin ed Echo e router come Gorilla Mux e Chi Router per creare il lato server della tua applicazione web.
Questi pacchetti sono costruiti sul pacchetto net/http (il pacchetto integrato per l’interazione con HTTP in Go) e astraggono le complessità della configurazione di server e router in Go.
Lascia un commento