Parsing de HTML em Go: visão geral das 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): visão geral das bibliotecas e exemplos práticos



Go (Golang) é uma linguagem compilada e estaticamente tipada, excelente para criar ferramentas de alto desempenho para web scraping e parsing de HTML. A biblioteca padrão embutida net/html fornece um tokenizador de baixo nível, no entanto, para trabalhar confortavelmente com a árvore DOM e seletores CSS, pacotes de terceiros são mais usados. Neste artigo, vamos analisar três ferramentas principais: goquery, colly e o pacote padrão net/html. Você aprenderá como escolher a ferramenta adequada e verá exemplos de código funcionais.



1. Biblioteca padrão: net/html



O pacote golang.org/x/net/html fornece um tokenizador e parser HTML. Ele implementa a especificação HTML5 e permite analisar o documento em uma árvore de nós. Esta é a opção mais leve e rápida, mas requer mais código para navegação.



Exemplo: extrair todos os links (<a href>) de uma página:



package main

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

func main() { resp, _ := http.Get("https://example.com") defer resp.Body.Close()

doc, _ := html.Parse(resp.Body)

var links []string 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" { links = append(links, attr.Val) } } } for c := n.FirstChild; c != nil; c = c.NextSibling { f(c) } } f(doc)

fmt.Println(strings.Join(links, ""))}


Prós: dependências mínimas, alta velocidade.
Contras: sem seletores CSS, é necessário escrever percorredores recursivos.



2. goquery — jQuery para Go



goquery é a biblioteca mais popular para parsing de HTML em Go. Ela usa net/html internamente e adiciona uma sintaxe semelhante ao jQuery. Você pode usar seletores CSS para encontrar elementos, encadeamento de chamadas e manipulação do DOM.



Instalação:

go get github.com/PuerkitoBio/goquery


Exemplo: coletar títulos de artigos de um blog:



package main

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

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

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

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


Principais métodos do goquery:

  • Find(selector) — busca de elementos por seletor CSS
  • Each(func) — iteração sobre os elementos encontrados
  • Attr(name) — obtenção do valor de um atributo
  • Text() — extração do conteúdo textual
  • Html() — obtenção do código HTML dentro do elemento


goquery é ideal para prototipagem rápida e parsing de páginas com estrutura complexa. No entanto, lembre-se: ele não suporta execução de JavaScript — é uma ferramenta para HTML estático.



3. Colly — framework para web scraping



Colly é um framework poderoso que inclui não apenas parsing de HTML (através do goquery), mas também gerenciamento de fila de requisições, trabalho com cookies, limites

Recommendations