Parseo de HTML en Go (Golang): bibliotecas y ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Parseo de HTML en Go (Golang): descripción general de herramientas y ejemplos



Go (Golang) es un lenguaje de programación compilado y tipado estáticamente de Google, ideal para crear parsers y web scrapers de alto rendimiento. Gracias al soporte integrado de concurrencia (gorutinas) y una rica biblioteca estándar, Go permite procesar documentos HTML de cualquier complejidad de manera eficiente. En este artículo, analizaremos las principales bibliotecas para el parseo de HTML en Go, sus capacidades y proporcionaremos ejemplos prácticos de código.



Biblioteca estándar: net/html



El paquete golang.org/x/net/html es la base para trabajar con HTML en Go. Proporciona un tokenizador y un parser que construye el árbol DOM del documento. Es una herramienta de bajo nivel que brinda control total sobre el proceso de análisis, pero requiere más código para tareas típicas.



Ejemplo de uso de net/html para extraer todos los enlaces de un documento HTML:



package main

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

func main() { htmlContent := `<html><body><a href="/page1">Enlace 1</a><a href="/page2">Enlace 2</a></body></html>` doc, _ := html.Parse(strings.NewReader(htmlContent)) var links []string var f func(*html.Node) f = func(n *html.Node) { if n.Type == html.ElementNode && n.Data == "a" { for _, attr := range n.Attr { if attr.Key == "href" { links = append(links, attr.Val) } } } for c := n.FirstChild; c != nil; c = c.NextSibling { f(c) } } f(doc) for _, link := range links { fmt.Println(link) }}


Este código recorre recursivamente el árbol DOM, encuentra todas las etiquetas <a> y extrae el valor del atributo href. El método es simple y confiable, pero para tareas más complejas (por ejemplo, búsqueda por selectores CSS), es mejor usar bibliotecas especializadas.



Biblioteca goquery: jQuery para Go



github.com/PuerkitoBio/goquery es la biblioteca más popular para el parseo de HTML en Go. Proporciona una API similar a jQuery: selección de elementos por selectores CSS, encadenamiento de métodos, manipulación del DOM. Esto hace que el código sea conciso y legible.



Instalación:

go get github.com/PuerkitoBio/goquery


Ejemplo de parseo de una página extrayendo encabezados y enlaces:



package main

import ( "fmt" "log" "net/http"

"github.com/PuerkitoBio/goquery")

func main() { // Cargamos la página HTML res, err := http.Get("https://example.com") if err != nil { log.Fatal(err) } defer res.Body.Close()

// Parseamos el HTML doc, err := goquery.NewDocumentFromReader(res.Body) if err != nil { log.Fatal(err) }

// Extraemos los encabezados h2 doc.Find("h2").Each(func(i int, s *goquery.Selection) { fmt.Printf("Encabezado %d: %s", i+1, s.Text()) })

// Extraemos todos los enlaces doc.Find("a").Each(func(i int, s *goquery.Selection) { link, _ := s.Attr("href") text := s.Text() fmt.Printf("Enlace %d: %s (%s)", i+1, text, link) })}


Características clave de goquery:

  • Selectores CSS: soporte para todos los selectores estándar (clases, ID, atributos, pseudoclases).
  • Encadenamiento de métodos: Find().Filter().Each() — el código se escribe como en jQuery.
  • Extracción de datos: métodos Text(), Html(), Attr().
  • Modificación del DOM: SetText(), SetHtml(), Append().


Para trabajar con grandes volúmenes de datos, goquer

Recommendations