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
,FindAll
yHTMLParse
, 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"