Parseo de HTML en Go: revisión de 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): revisión de bibliotecas y ejemplos prácticos



Go (Golang) es un lenguaje compilado y de tipado estático que es ideal para crear herramientas de alto rendimiento para web scraping y parseo de HTML. La biblioteca estándar incorporada net/html proporciona un tokenizador de bajo nivel, sin embargo, para trabajar cómodamente con el árbol DOM y los selectores CSS, se suelen usar paquetes de terceros. En este artículo, analizaremos tres herramientas clave: goquery, colly y el paquete estándar net/html. Aprenderás cómo elegir la herramienta adecuada y verás ejemplos de código funcionales.



1. Biblioteca estándar: net/html



El paquete golang.org/x/net/html proporciona un tokenizador y un analizador de HTML. Implementa la especificación HTML5 y permite descomponer un documento en un árbol de nodos. Es la opción más ligera y rápida, pero requiere escribir más código para la navegación.



Ejemplo: extraer todos los enlaces (<a href>) de una página:



package main

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

func main() { resp, _ := http.Get("https://example.com") defer resp.Body.Close()

doc, _ := html.Parse(resp.Body)

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)

fmt.Println(strings.Join(links, ""))}


Ventajas: dependencias mínimas, alta velocidad.
Desventajas: no tiene selectores CSS, hay que escribir recorridos recursivos.



2. goquery — jQuery para Go



goquery es la biblioteca más popular para el parseo de HTML en Go. Utiliza net/html internamente y añade una sintaxis similar a jQuery. Puedes usar selectores CSS para buscar elementos, encadenar llamadas y manipular el DOM.



Instalación:

go get github.com/PuerkitoBio/goquery


Ejemplo: recopilar títulos de artículos de un blog:



package main

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

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

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

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


Métodos principales de goquery:

  • Find(selector) — búsqueda de elementos por selector CSS
  • Each(func) — iteración sobre los elementos encontrados
  • Attr(name) — obtención del valor de un atributo
  • Text() — extracción del contenido textual
  • Html() — obtención del código HTML dentro del elemento


goquery es ideal para prototipado rápido y para el parseo de páginas con estructura compleja. Sin embargo, recuerda: no admite la ejecución de JavaScript — es una herramienta para HTML estático.



3. Colly — framework para web scraping



Colly es un potente framework que incluye no solo el parseo de HTML (a través de goquery), sino también la gestión de colas de solicitudes, el trabajo con cookies, límites de

Recommendations