Go:
Tolka HTML

Hur man gör:

För att parsa HTML i Go använder du vanligtvis paketet goquery eller standardbibliotekets paket net/html. Här är ett grundläggande exempel som använder net/html för att extrahera alla länkar från en webbsida:

package main

import (
    "fmt"
    "golang.org/x/net/html"
    "net/http"
)

func main() {
    // Hämta HTML-dokument
    res, err := http.Get("http://example.com")
    if err != nil {
        panic(err)
    }
    defer res.Body.Close()

    // Tolka HTML-dokumentet
    doc, err := html.Parse(res.Body)
    if err != nil {
        panic(err)
    }

    // Funktion för att rekursivt genomgå 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)
        }
    }

    // Genomgå DOM
    f(doc)
}

Exempelutdata (med antagandet att http://example.com innehåller två länkar):

http://www.iana.org/domains/example
http://www.iana.org/domains/reserved

Denna kod begär en HTML-sida, tolkar den och genomgår rekursivt DOM för att hitta och skriva ut href-attributen för alla <a>-taggar.

Djupdykning

Paketet net/html tillhandahåller grunderna för att parsa HTML i Go, genom att direkt implementera tokeniserings- och trädbyggnadsalgoritmerna som specificeras av HTML5-standarden. Detta lågnivåtillvägagångssätt är kraftfullt men kan vara ordrikt för komplexa uppgifter.

I motsats härtil erbjuder det tredjepartspaketet goquery, inspirerat av jQuery, ett högre nivå gränssnitt som förenklar DOM-manipulering och genomgång. Det tillåter utvecklare att skriva koncis och uttrycksfull kod för uppgifter som elementval, attributextraktion och innehållsmanipulering.

Dock kommer goquery:s bekvämlighet till priset av ett extra beroende och potentiellt långsammare prestanda på grund av dess abstraktionslager. Valet mellan net/html och goquery (eller andra parsingsbibliotek) beror på projektets specifika krav, såsom behovet av prestandaoptimering eller användarvänlighet.

Historiskt sett har HTML-parsing i Go utvecklats från grundläggande strängoperationer till sofistikerad DOM-trädsmanipulation, vilket återspeglar språkets växande ekosystem och gemenskapens efterfrågan på robusta verktyg för webbskrapning och dataextraktion. Trots inhemska möjligheter, markerar förekomsten av tredjepartsbibliotek som goquery Go-gemenskapens preferens för modulariserad, återanvändbar kod. Dock kan programmerare, för prestandakritiska applikationer, fortfarande föredra paketet net/html eller till och med ta till regex för enkla parsingsuppgifter, med beaktande av de inneboende riskerna och begränsningarna med regex-baserad HTML-parsing.