Alternativas a Beautiful Soup para Go
Continuando el tema de extracción de datos de HTML
- Para un análogo directo de Beautiful Soup en Go, usa soup.
- Para soporte de selectores CSS, considera goquery.
- Para consultas XPath, usa 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 raspado de HTML:

soup
- soup es una biblioteca de Go diseñada específicamente como un análogo de Beautiful Soup en Python. Su API es intencionalmente similar, con funciones como
Find,FindAllyHTMLParse, lo que facilita la transición para desarrolladores familiarizados con Beautiful Soup. - Permite obtener páginas web, analizar HTML y recorrer el DOM para extraer datos, de manera 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(), "| Link :", link.Attrs()["href"]) } - Nota: soup no admite selectores CSS ni XPath; depende de la búsqueda basada en etiquetas y atributos.
goquery
- goquery es otra biblioteca popular de Go para el análisis de HTML, ofreciendo una sintaxis similar a jQuery para el recorrido 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(), "| Link :", s.AttrOr("href", "")) })
htmlquery (Biblioteca Go)
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.
Funciones clave
- Permite consultar documentos HTML con expresiones XPath 1.0/2.0.
- Soporta la carga de HTML desde cadenas, archivos o URLs.
- Ofrece funciones para encontrar nodos individuales o múltiples, extraer atributos y evaluar expresiones XPath.
- Incluye caché de consultas (basado en LRU) para mejorar el rendimiento evitando la compilación repetida de expresiones XPath.
- Está construida sobre las bibliotecas estándar de análisis de HTML de Go y es compatible con otras bibliotecas de Go como goquery.
Ejemplos de uso básico
Cargar HTML desde una cadena:
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)) // Muestra el texto dentro
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 programática de árboles HTML.
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 - agrega 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("Visiting", r.URL)
})
c.Visit("http://go-colly.org/")
}
Tabla de comparación
| 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 | Solo etiqueta y atributo | Beautiful Soup | Similar a soup |
Resumen
- Para un análogo directo de Beautiful Soup en Go, usa soup.
- Para soporte de selectores CSS, considera goquery.
- Para consultas XPath, usa htmlquery.
- Para otra opción inspirada en Beautiful Soup, mira Node.
Todas estas bibliotecas aprovechan el análisis de HTML estándar de Go, que es robusto y compatible con HTML5, por lo que la principal diferencia radica en el estilo de API y las capacidades de selección.
Enlaces útiles
- Generar PDF en Python - Bibliotecas y ejemplos"
- Hoja de trucos de Golang
- Rendimiento de AWS Lambda: JavaScript vs Python vs Golang
- Corregir error de Golang GORM AutoMigrate en PostgreSQL
- Popularidad de lenguajes de programación y frameworks
- Hoja de trucos de Bash
- Generar PDF en GO - Bibliotecas y ejemplos"