Alternativas de Beautiful Soup para Go
Continuando con el tema de la extracción de datos de HTML
- Para un análogo directo de Beautiful Soup en Go, utiliza soup.
- Para soporte de selectores CSS, considera goquery.
- Para consultas XPath, utiliza htmlquery.
- Para otra opción inspirada en Beautiful Soup, mira Node.
Si estás buscando un equivalente de Beautiful Soup en Go, varias bibliotecas ofrecen funcionalidades similares de análisis y extracción de HTML:

soup
- soup es una biblioteca de Go diseñada explícitamente como un análogo de Beautiful Soup de Python. Su API es intencionalmente similar, e incluye funciones como
Find,FindAllyHTMLParse, lo que facilita la transición a Go para los desarrolladores familiarizados con Beautiful Soup. - Permite obtener páginas web, analizar HTML y recorrer el DOM para extraer datos, de manera muy similar a Beautiful Soup.
- Ejemplo de uso:
resp, err := soup.Get("https://xkcd.com") if err != nil { os.Exit(1) } doc := soup.HTMLParse(resp) links := doc.Find("div", "id", "comicLinks").FindAll("a") for _, link := range links { fmt.Println(link.Text(), "| Enlace :", link.Attrs()["href"]) } - Nota: soup no admite selectores CSS ni XPath; se basa en búsquedas por etiqueta y atributo.
goquery
- goquery es otra biblioteca de Go popular para el análisis de HTML, que ofrece una sintaxis similar a jQuery para la navegación y manipulación del DOM.
- Admite selectores CSS, lo que lo hace más flexible para consultas complejas en comparación con soup.
- Ejemplo de uso:
doc, err := goquery.NewDocumentFromReader(resp.Body) doc.Find("div#comicLinks a").Each(func(i int, s *goquery.Selection) { fmt.Println(s.Text(), "| Enlace :", s.AttrOr("href", "")) })
Biblioteca Go htmlquery
htmlquery es una biblioteca de Go diseñada para analizar y extraer datos de documentos HTML utilizando expresiones XPath. Proporciona una API sencilla para recorrer y consultar la estructura del árbol HTML, lo que la hace especialmente útil para tareas de raspado web y extracción de datos.
Características principales
- Permite consultar documentos HTML con expresiones XPath 1.0/2.0.
- Soporta la carga de HTML desde cadenas de caracteres, archivos o URLs.
- Ofrece funciones para encontrar nodos individuales o múltiples, extraer atributos y evaluar expresiones XPath.
- Incluye caché de consultas (basada en LRU) para mejorar el rendimiento al evitar la recompilación repetida de expresiones XPath.
- Está construida sobre las bibliotecas estándar de análisis HTML de Go y es compatible con otras bibliotecas de Go como goquery.
Ejemplos básicos de uso
Cargar HTML desde una cadena de caracteres:
doc, err := htmlquery.Parse(strings.NewReader("..."))
Cargar HTML desde una URL:
doc, err := htmlquery.LoadURL("http://example.com/")
Encontrar todos los elementos `` :
list := htmlquery.Find(doc, "//a")
Encontrar todos los elementos `` con un atributo href:
list := htmlquery.Find(doc, "//a[@href]")
Extraer el texto del primer elemento `` :
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Imprime el texto dentro de
Extraer todos los valores del atributo href de los elementos `` :
list := htmlquery.Find(doc, "//a/@href")
for _, n := range list {
fmt.Println(htmlquery.SelectAttr(n, "href"))
}
Casos de uso típicos
- Raspado web donde XPath proporciona consultas más precisas o complejas que los selectores CSS.
- Extracción de datos estructurados de documentos HTML.
- Navegación y manipulación de árboles HTML de forma programática.
Instalación
go get github.com/antchfx/htmlquery
Node
- Node es un paquete de Go inspirado en Beautiful Soup, que proporciona APIs para extraer datos de documentos HTML y XML.
Colly
Colly - Un marco de raspado web para Go, que utiliza goquery internamente para el análisis de HTML.
https://github.com/gocolly/colly
Para instalar, añade colly a tu archivo go.mod:
module github.com/x/y
go 1.14
require (
github.com/gocolly/colly/v2 latest
)
Ejemplo:
func main() {
c := colly.NewCollector()
// Encontrar y visitar todos los enlaces
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visitando", r.URL)
})
c.Visit("http://go-colly.org/")
}
Tabla comparativa
| Biblioteca | Estilo de API | Soporte de selectores | Inspiración | Notas |
|---|---|---|---|---|
| soup | Similar a Beautiful Soup | Solo etiqueta y atributo | Beautiful Soup | Simple, sin CSS/XPath |
| goquery | Similar a jQuery | Selectores CSS | jQuery | Flexible, popular |
| htmlquery | XPath | XPath | lxml/XPath | Consultas avanzadas |
| Node | Similar a Beautiful Soup | Etiqueta y atributo | Beautiful Soup | Similar a soup |
Resumen
- Para un análogo directo de Beautiful Soup en Go, utiliza soup.
- Para soporte de selectores CSS, considera goquery.
- Para consultas XPath, utiliza htmlquery.
- Para otra opción inspirada en Beautiful Soup, mira Node.
Todas estas bibliotecas aprovechan el analizador HTML estándar de Go, que es robusto y compatible con HTML5, por lo que la principal diferencia radica en el estilo de la API y en las capacidades de los selectores.
Enlaces útiles
- Hoja de referencia de Golang
- Corrección del error de postgresql en AutoMigrate de GORM para Golang
- Popularidad de lenguajes de programación y marcos de trabajo
- Hoja de referencia de Bash
- Generación de PDF en GO - Bibliotecas y ejemplos
- Centro de herramientas para desarrolladores — hojas de referencia, herramientas de CLI y flujos de trabajo de desarrollo