Alternativas para Beautiful Soup em Go
Continuando o tópico sobre a extração de dados de HTML
- Para um análogo direto do Beautiful Soup em Go, use o soup.
- Para suporte a seletores CSS, considere o goquery.
- Para consultas XPath, use o htmlquery.
- Para outra opção inspirada no Beautiful Soup, veja o Node.
Se você está procurando por um equivalente do Beautiful Soup em Go, várias bibliotecas oferecem funcionalidades semelhantes de análise e raspagem de HTML:

soup
- O soup é uma biblioteca Go projetada explicitamente como um análogo do Beautiful Soup em Python. Sua API é intencionalmente semelhante, apresentando funções como
Find,FindAlleHTMLParse, o que facilita a transição para o Go para desenvolvedores familiarizados com o Beautiful Soup. - Ele permite obter páginas web, analisar HTML e percorrer o DOM para extrair dados, muito parecido com o Beautiful Soup.
- Exemplo 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: O soup não suporta seletores CSS ou XPath; ele depende da busca baseada em tags e atributos.
goquery
- O goquery é outra popular biblioteca Go para análise de HTML, oferecendo uma sintaxe semelhante à do jQuery para navegação e manipulação do DOM.
- Ele suporta seletores CSS, tornando-o mais flexível para consultas complexas em comparação com o soup.
- Exemplo 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", "")) })
Biblioteca Go htmlquery
O htmlquery é uma biblioteca Go projetada para analisar e extrair dados de documentos HTML usando expressões XPath. Ele oferece uma API direta para percorrer e consultar a estrutura em árvore do HTML, tornando-o especialmente útil para tarefas de raspagem web e extração de dados.
Principais Recursos
- Permite consultar documentos HTML com expressões XPath 1.0/2.0.
- Suporta carregamento de HTML de strings, arquivos ou URLs.
- Oferece funções para encontrar um único nó ou vários nós, extrair atributos e avaliar expressões XPath.
- Inclui cache de consultas (baseado em LRU) para melhorar o desempenho ao evitar a recompilação repetida de expressões XPath.
- Construído sobre as bibliotecas padrão de análise de HTML do Go e compatível com outras bibliotecas Go, como a goquery.
Exemplos Básicos de Uso
Carregar HTML de uma string:
doc, err := htmlquery.Parse(strings.NewReader("..."))
Carregar HTML de uma URL:
doc, err := htmlquery.LoadURL("http://example.com/")
Encontrar todos os elementos ``:
list := htmlquery.Find(doc, "//a")
Encontrar todos os elementos `` com o atributo href:
list := htmlquery.Find(doc, "//a[@href]")
Extrair o texto do primeiro elemento ``:
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Imprime o texto dentro de
Extrair todos os valores do atributo href dos elementos ``:
list := htmlquery.Find(doc, "//a/@href")
for _, n := range list {
fmt.Println(htmlquery.SelectAttr(n, "href"))
}
Casos de Uso Típicos
- Raspagem web onde XPath fornece consultas mais precisas ou complexas do que os seletores CSS.
- Extração de dados estruturados de documentos HTML.
- Navegação e manipulação de árvores HTML programaticamente.
Instalação
go get github.com/antchfx/htmlquery
Node
- O Node é um pacote Go inspirado no Beautiful Soup, fornecendo APIs para extração de dados de documentos HTML e XML.
Colly
Colly - Um framework de raspagem web para Go, que usa internamente o goquery para análise de HTML.
https://github.com/gocolly/colly
Para instalar - adicione o colly ao seu arquivo go.mod:
module github.com/x/y
go 1.14
require (
github.com/gocolly/colly/v2 latest
)
Exemplo:
func main() {
c := colly.NewCollector()
// Find and visit all links
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/")
}
Tabela Comparativa
| Biblioteca | Estilo de API | Suporte a Seletores | Inspiração | Notas |
|---|---|---|---|---|
| soup | Semelhante ao Beautiful Soup | Apenas Tag e atributo | Beautiful Soup | Simples, sem CSS/XPath |
| goquery | Semelhante ao jQuery | Seletores CSS | jQuery | Flexível, popular |
| htmlquery | XPath | XPath | lxml/XPath | Consultas avançadas |
| Node | Semelhante ao Beautiful Soup | Tag e atributo | Beautiful Soup | Semelhante ao soup |
Resumo
- Para um análogo direto do Beautiful Soup em Go, use o soup.
- Para suporte a seletores CSS, considere o goquery.
- Para consultas XPath, use o htmlquery.
- Para outra opção inspirada no Beautiful Soup, veja o Node.
Todas essas bibliotecas aproveitam o parser padrão de HTML do Go, que é robusto e compatível com HTML5, portanto a principal diferença reside no estilo da API e nas capacidades de seletores.
Links Úteis
- Folha de Dicas Golang
- Corrigindo o erro de postgresql do GORM AutoMigrate em Golang
- Popularidade de linguagens de programação e frameworks
- Folha de Dicas Bash
- Gerando PDF em GO - Bibliotecas e exemplos
- Hub de Ferramentas para Desenvolvedores — folhas de dicas, ferramentas de CLI e fluxos de trabalho de desenvolvimento