Jak analizować i generować HTML w Go

Jak analizować i generować HTML w Go

Parsowanie to analiza i interpretacja struktury dokumentu. Proces analizowania może obejmować wyodrębnianie określonych elementów, atrybutów lub danych z dokumentu i sprawdzanie, czy dokument jest dobrze sformatowany przy zachowaniu określonych standardów lub zasad. Analiza składniowa służy głównie do wyodrębniania danych ze stron internetowych lub manipulowania strukturą stron internetowych przed wyświetleniem ich użytkownikom.

Go udostępnia pakiety do pracy z dokumentami, w tym formatami HTML i XML, które są powszechnie używane na stronach internetowych. Pakiet html udostępnia funkcje do tokenizacji i analizowania kodu HTML.

Pakiet HTML

Pakiet html zapewnia tokenizator i parser zgodny z HTML5 do analizowania i manipulowania dokumentami HTML, przechodzenia przez drzewo analizy i manipulowania strukturą drzewa. Pakiet html jest wbudowanym pakietem standardowej biblioteki Go.

Jedną z głównych cech pakietu html jest funkcja Parse , która może analizować dokumenty HTML i zwracać węzeł główny drzewa analizy, z którego można korzystać z funkcji takich jak FirstChild i NextSibling , aby poruszać się po drzewie i wyodrębniać informacje z dokumentu. Pakiet udostępnia również funkcję ParseFragment do parsowania fragmentów dokumentów HTML.

Funkcja EscapeString jest przydatna do zmiany znaczenia znaków specjalnych w łańcuchach w celu bezpieczniejszego włączenia ich do HTML; możesz użyć tej funkcji, aby zapobiec atakom cross-site scripting (XSS), konwertując znaki specjalne na odpowiadające im jednostki HTML.

Aby rozpocząć pracę z pakietem html , możesz zaimportować pakiet do plików projektu Go.

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

Pakiet html nie udostępnia żadnych funkcji do generowania HTML. Zamiast tego można skorzystać z pakietu html/template, który oferuje zestaw funkcji do generowania szablonów HTML. Pakiet html/template zawiera funkcję template.HTMLEscape do zapisywania wersji kodu HTML z kodem ucieczki do programu piszącego odpowiedzi.

Pakiet html/template jest również częścią standardowej biblioteki i oto jak możesz zaimportować ten pakiet.

import "html/template"

Pakiet html jest najpopularniejszym pakietem szablonów w ekosystemie Go i obsługuje różne operacje i typy danych.

Parsowanie HTML w Go

Funkcja Parse pakietu html pomaga w analizowaniu tekstu i dokumentów HTML. Funkcja Parse przyjmuje instancję io.Reader , ponieważ jest to pierwszy argument zawierający plik dokument i instancję * html.Node , która jest węzłem głównym dokumentu HTML

Oto jak możesz użyć funkcji Parse , aby przeanalizować stronę internetową i zwrócić wszystkie adresy URL na stronie internetowej.

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

Funkcja main wysyła żądanie HTTP GET do witryny z funkcją Get pakietu http i pobiera treść odpowiedzi strony. Funkcja Parse pakietu html analizuje treść odpowiedzi i zwraca dokument HTML.

Zmienna links to wycinek ciągów, który będzie zawierał adresy URL ze strony internetowej. Funkcja link pobiera referencję wskaźnikową do metody Node dla pakietu html , a metoda Key instancji atrybutu z węzła zwraca dane zawarte w określonym atrybucie (w tym przypadku href ). Funkcja przechodzi przez dokument za pomocą metody NextSibling z węzła FirstChild , aby wydrukować każdy adres URL na stronie internetowej. Na koniec pętla for wypisuje wszystkie adresy URL z wycinka linków .

Oto wynik operacji.

wynik pobierania linków ze strony internetowej

Generowanie HTML w Go

Pakiet html/template zapewnia zestaw funkcji do bezpiecznego i wydajnego analizowania i wykonywania szablonów HTML. Pakiet jest przeznaczony do użytku w połączeniu z pakietem html , który udostępnia funkcje do analizowania i manipulowania kodem HTML.

Możesz wygenerować kod HTML do renderowania po stronie serwera za pomocą pakietu html/template . Generowanie kodu HTML jest przydatne w wielu przypadkach, takich jak wysyłanie wiadomości e-mail, renderowanie frontendu po stronie serwera i wiele innych. Możesz używać wbudowanych typów danych Go, takich jak mapy i struktury, do interakcji i manipulowania kodem HTML swojej strony internetowej.

Musisz zrozumieć składnię szablonów Go HTML, aby pomyślnie wygenerować kod HTML za pomocą pakietu 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)
    }
}

Zmienna tmpl zawiera ciąg znaków HTML. Ciąg HTML wykorzystuje składnię szablonów Go do zdefiniowania tytułu strony, nagłówka h1 i akapitu tekstu. Struktura webPage definiuje pola danych dla strony internetowej z polami Title , Heading i Text .

Metoda Parse funkcji New pakietu szablonów tworzy i analizuje nowy szablon z ciągiem szablonu. Funkcja Execute nowej instancji szablonu wykonuje szablon z danymi z instancji struct i zwraca wynik na standardowe wyjście (w tym przypadku wypisuje wynik na konsoli).

wynik z generowania html

Twórz aplikacje internetowe za pomocą Go

Nauka analizowania i generowania HTML za pomocą Go to krok we właściwym kierunku w kierunku tworzenia bardziej zaawansowanych aplikacji internetowych za pomocą Go. Możesz użyć frameworków, takich jak Gin i Echo, oraz routerów, takich jak Gorilla Mux i Chi Router, aby zbudować stronę serwerową swojej aplikacji internetowej.

Pakiety te są zbudowane na pakiecie net/http (wbudowany pakiet do interakcji z HTTP w Go) i streszczają złożoność konfigurowania serwerów i routerów w Go.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *