Accueil Technologie
Comment analyser et générer du HTML en Go ?

Comment analyser et générer du HTML en Go ?

L’analyse syntaxique consiste à analyser et interpréter la structure d’un document. Le processus d’analyse peut inclure l’extraction d’éléments, d’attributs ou de données spécifiques du document et la vérification que le document est bien formaté tout en respectant des normes ou des règles spécifiques. L’analyse syntaxique est principalement utilisée pour extraire des données des pages Web ou pour manipuler la structure des pages Web avant de les afficher aux utilisateurs.

Go fournit des paquets pour travailler avec des documents, y compris les formats HTML et XML utilisés dans les pages web. Le site html Le paquetage fournit des fonctions pour la tokenisation et l’analyse du HTML.


Le paquet HTML

Le site html fournit un tokeniseur et un analyseur conforme à HTML5 pour analyser et manipuler les documents HTML, parcourir l’arbre d’analyse et manipuler l’arborescence. Le site html package est un paquetage intégré à la bibliothèque standard de Go.

L’une des principales caractéristiques du html Le paquet est le Parse qui peut analyser les documents HTML et renvoyer le nœud racine de l’arbre d’analyse, à partir duquel vous pouvez utiliser des fonctions comme la fonction FirstChild et Frères et sœurs suivants pour naviguer dans l’arbre et extraire des informations du document. Le paquetage fournit également la fonction ParseFragment Fonction permettant d’analyser les fragments de documents HTML.

Le site EscapeString est pratique pour échapper les caractères spéciaux dans les chaînes de caractères afin de les inclure de manière plus sûre dans le code HTML. Vous pouvez utiliser cette fonction pour prévenir les attaques de type cross-site scripting (XSS) en convertissant les caractères spéciaux en entités HTML correspondantes.

Pour commencer à utiliser la fonction html vous pouvez importer le paquet dans vos fichiers de projet Go.

 import "golang.org/x/net/html"

Le site html ne fournit pas de fonctions pour générer du HTML. À la place, vous pouvez utiliser le paquetage html/template, qui offre un ensemble de fonctions pour générer des modèles HTML. Le site html/template Le paquet fournit une fonction template.HTMLEscape pour écrire des versions échappées du HTML à un rédacteur de réponses.

Le site html/template fait également partie de la bibliothèque standard, et voici comment vous pouvez l’importer.

 import "html/template"

Le site html est le paquet de modélisation le plus utilisé dans l’écosystème Go et prend en charge plusieurs opérations et types de données.

Analyser du HTML en Go

Le site Parse fonction de la html Ce paquet aide à analyser les textes et les documents HTML. Le site Parse La fonction prend en compte un io.Reader car il s’agit d’un premier argument contenant le document du fichier et une *html.Node instance, qui est le nœud racine du document HTML

Voici comment vous pouvez utiliser la méthode Parse pour analyser une page Web et renvoyer toutes les URL de la page.

 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)
    }
}

Le site principal envoie une requête HTTP GET au site web avec l’option Obtenir fonction de la http et récupère le corps de la réponse de la page. L’adresse Parse fonction de la html Le paquet analyse le corps de la réponse et renvoie le document HTML.

Le site liens La variable links est la tranche de chaînes de caractères qui contiendra les URL de la page web. Le site lien prend en compte la référence du pointeur vers le Node méthode pour le html et le paquet Clé de l’instance d’attribut du nœud renvoie les données contenues dans un attribut spécifié (dans ce cas, href). La fonction parcourt le document avec la balise Frère ou soeur suivant(e) de la méthode FirstChild pour imprimer chaque URL de la page Web. Enfin, la boucle for imprime toutes les URL du noeud liens tranche.

Voici le résultat de l’opération.

résultat de la récupération des liens d'une page web

Générer du HTML en Go

Le site html/template fournit un ensemble de fonctions pour l’analyse et l’exécution sûres et efficaces des modèles HTML. Ce paquetage est conçu pour être utilisé en conjonction avec le paquetage html qui fournit des fonctions pour analyser et manipuler le langage HTML.

Vous pouvez générer du HTML pour un rendu côté serveur avec la fonction html/template paquet. La génération de HTML est pratique pour de nombreux cas d’utilisation comme l’envoi d’e-mails, le rendu frontal côté serveur, et bien d’autres encore. Vous pouvez utiliser les types de données Go intégrés, comme les maps et les structs, pour interagir et manipuler le HTML de votre page Web.

Vous devrez comprendre la syntaxe de modélisation HTML de Go pour réussir à générer du HTML avec la fonction de modélisation de Go. html/template paquet.

 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)
    }
}

Le site tmpl contient la chaîne HTML. La chaîne HTML utilise la syntaxe de modélisation de Go pour définir le titre de la page, une balise h1 un en-tête et un paragraphe de texte. Le site webPage struct définit les champs de données de la page web avec l’attribut Titre, Directionet Texte champs.

Le site Parse méthode de la Nouveau de l’ensemble des modèles crée et analyse un nouveau modèle avec la chaîne de caractères du modèle. Le site Exécuter de la nouvelle instance de modèle exécute le modèle avec les données de votre instance de structure et renvoie le résultat à la sortie standard (dans ce cas, il imprime le résultat à la console).

résultat de la génération html

Construire des applications Web avec Go

Apprendre à analyser et générer du HTML avec Go est un pas dans la bonne direction pour construire des applications web plus sophistiquées avec Go. Vous pouvez utiliser des frameworks comme Gin et Echo et des routeurs comme Gorilla Mux et le Chi Router pour construire le côté serveur de votre application web.

Ces paquets sont construits sur le net/http (le paquet intégré permettant d’interagir avec HTTP en Go) et de faire abstraction de la complexité de la configuration des serveurs et des routeurs en Go.

0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x