Parsing de HTML em Go (Golang): bibliotecas e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Parsing de HTML em Go (Golang): ferramentas e exemplos práticos



Go (Golang) é uma linguagem compilada, estaticamente tipada, criada no Google. Graças à alta performance, suporte nativo a concorrência e rica biblioteca padrão, Go se tornou uma das melhores linguagens para web scraping e parsing de HTML. Neste artigo, abordaremos as principais bibliotecas para trabalhar com documentos HTML em Go, forneceremos exemplos de código e compararemos suas funcionalidades.



Por que fazer parsing de HTML em Go?

O parsing de HTML é necessário para extrair dados de páginas web: notícias, preços, informações de contato, resultados de pesquisa. Go é excelente para essa tarefa devido a:

  • Alta velocidade de execução (compila para código de máquina)
  • Facilidade de trabalho com rede (pacote nativo net/http)
  • Simplicidade na análise da árvore DOM através de bibliotecas especializadas
  • Excelente suporte a multithreading (goroutines e canais)


Principais bibliotecas para parsing de HTML em Go



1. net/html — biblioteca padrão

golang.org/x/net/html é um tokenizador e parser de HTML de baixo nível da biblioteca padrão do Go. Ele oferece controle total sobre o processo de parsing, mas requer mais código para ser escrito.

Exemplo: extrair todos os links (<a href>) de um documento HTML.

package main

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

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

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

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" { fmt.Println(attr.Val) } } } for c := n.FirstChild; c != nil; c = c.NextSibling { f(c) } } f(doc)}

Prós: não requer instalação de pacotes de terceiros, controle total. Contras: muito código boilerplate, inconveniente para seletores complexos.



2. goquery — sintaxe semelhante ao jQuery

github.com/PuerkitoBio/goquery é a biblioteca mais popular para parsing de HTML em Go. Ela fornece uma API semelhante ao jQuery: Find(), Each(), Attr(), Text().

Exemplo: parsing de títulos de notícias de um site.

package main

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

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

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

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

Prós: sintaxe simples, suporte a seletores CSS, documentação rica. Contras: não é adequado para documentos muito grandes (carrega tudo na memória).



3. colly — framework para web scraping

github.com/gocolly/colly é um poderoso framework para coleta de dados. Ele inclui parsing de HTML (baseado em goquery), gerenciamento de fila de requisições, manipulação de cookies, limites de velocidade e muito mais.

Exemplo: coleta de todos os links da primeira página de um site com atraso entre requisições.

package main

import ( "fmt" "github.com/gocolly/colly/v2")

func main() { c := colly.NewC

Recommendations