Análisis 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

Análisis de HTML en Go (Golang): herramientas y ejemplos prácticos



Go (Golang) es un lenguaje compilado, de tipado estático, creado en Google. Gracias a su alto rendimiento, soporte incorporado para concurrencia y su rica biblioteca estándar, Go se ha convertido en uno de los mejores lenguajes para el web scraping y el análisis de HTML. En este artículo, exploraremos las principales bibliotecas para trabajar con documentos HTML en Go, proporcionaremos ejemplos de código y compararemos sus capacidades.



¿Por qué analizar HTML en Go?

El análisis de HTML es necesario para extraer datos de páginas web: noticias, precios, información de contacto, resultados de búsqueda. Go es ideal para esta tarea gracias a:

  • Alta velocidad de ejecución (se compila a código máquina)
  • Fácil manejo de redes (paquete integrado net/http)
  • Simplicidad para analizar el árbol DOM mediante bibliotecas especializadas
  • Excelente soporte para multiprocesamiento (gorutinas y canales)


Principales bibliotecas para el análisis de HTML en Go



1. net/html — biblioteca estándar

golang.org/x/net/html es un tokenizador y analizador HTML de bajo nivel de la biblioteca estándar de Go. Proporciona control total sobre el proceso de análisis, pero requiere escribir más código.

Ejemplo: extraer todos los enlaces (<a href>) de un documento HTML.

package main

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

func main() { resp, err := http.Get("https://example.com") if err != nil { log.Fatal(err) } defer resp.Body.Close()

doc, err := html.Parse(resp.Body) if err != nil { log.Fatal(err) }

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" { fmt.Println(attr.Val) } } } for c := n.FirstChild; c != nil; c = c.NextSibling { f(c) } } f(doc)}

Ventajas: no requiere instalar paquetes externos, control total. Desventajas: mucho código repetitivo, incómodo para selectores complejos.



2. goquery — sintaxis similar a jQuery

github.com/PuerkitoBio/goquery es la biblioteca más popular para el análisis de HTML en Go. Proporciona una API similar a jQuery: Find(), Each(), Attr(), Text().

Ejemplo: analizar titulares de noticias de un sitio web.

package main

import ( "fmt" "github.com/PuerkitoBio/goquery" "log" "net/http")

func main() { resp, err := http.Get("https://habr.com/ru/news/") if err != nil { log.Fatal(err) } defer resp.Body.Close()

doc, err := goquery.NewDocumentFromReader(resp.Body) if err != nil { log.Fatal(err) }

doc.Find("h2.tm-article-snippet__title").Each(func(i int, s *goquery.Selection) { title := s.Find("a").Text() link, _ := s.Find("a").Attr("href") fmt.Printf("%d. %s Enlace: %s", i+1, title, link) })}

Ventajas: sintaxis simple, soporte para selectores CSS, documentación completa. Desventajas: no es adecuado para documentos muy grandes (carga todo en memoria).



3. colly — framework para web scraping

github.com/gocolly/colly es un potente framework para la recolección de datos. Incluye análisis de HTML (basado en goquery), gestión de colas de solicitudes, manejo de cookies, límites de velocidad y mucho más.

Ejemplo: recopilar todos los enlaces de la primera página de un sitio web con un retraso entre solicitudes.

package main

import ( "fmt" "github.com/gocolly/colly/v2")

func main() { c := colly.NewC

Recommendations