Colly para Go: guia completo de web scraping
1. O que é Colly e por que usar?
Colly é uma biblioteca poderosa e de alto desempenho para web scraping (raspagem de dados) na linguagem Go. Ela oferece uma interface limpa, assíncrona e facilmente extensível para extrair dados de sites. Colly é construída sobre os pacotes net/http e goquery (análogo ao jQuery para Go), permitindo que desenvolvedores usem a sintaxe familiar de seletores CSS para navegar pelo documento HTML.
Por que usar esta biblioteca? No mundo atual, dados são o novo petróleo. Web scraping automatiza a coleta de informações: monitoramento de preços de concorrentes, agregação de notícias, análise de métricas de SEO, criação de bancos de dados de produtos e muito mais. Colly se destaca por sua velocidade (arquitetura assíncrona com goroutines), suporte nativo a cache, gerenciamento automático de delays (para respeitar políticas dos sites) e um sistema flexível de callbacks.
A biblioteca é ideal tanto para scripts pequenos quanto para grandes sistemas distribuídos de coleta de dados. Graças à tipagem forte do Go e à ausência de runtime (diferente de Python/Node.js), aplicações Colly compilam em um único binário, simplificando deploy e escalabilidade.
2. Instalação
Para instalar o Colly, use o gerenciador de pacotes padrão do Go. Certifique-se de ter o Go versão 1.18 ou superior instalado.
go get -u github.com/gocolly/colly/v2
Após executar o comando, a biblioteca será adicionada ao seu arquivo go.mod. Também é recomendado instalar o goquery para trabalhar com HTML (ele será baixado automaticamente como dependência):
go get -u github.com/PuerkitoBio/goquery
3. Primeiros passos: exemplo mínimo
Vamos criar um scraper simples que exibe os títulos (tags <h1>) da página inicial do site example.com.
package main
import (
"fmt"
"github.com/gocolly/colly/v2"
)
func main() {
// Cria um novo coletor
c := colly.NewCollector()
// Manipulador para páginas visitadas
c.OnHTML("h1", func(e *colly.HTMLElement) {
fmt.Println("Título:", e.Text)
})
// Manipulador de erros
c.OnError(func(r *colly.Response, err error) {
fmt.Println("Erro:", err)
})
// Inicia a raspagem
c.Visit("https://example.com")
}
Execute o código com o comando go run main.go. Você verá o título da página. Esta é a base mínima para começar.
4. Principais métodos e funções (mínimo de 8)
Vamos explorar os métodos essenciais do Colly que cobrem 90% das tarefas de web scraping.
4.1 colly.NewCollector()
Assinatura: func NewCollector(options ...func(*Collector)) *Collector
O que faz: Cria uma nova instância do coletor — o objeto principal para gerenciar a raspagem. Aceita funções opcionais de configuração.
// Criando com configurações
c := colly.NewCollector(
colly.AllowedDomains("example.com"), // Permitir apenas example.com
colly.CacheDir("./cache"), // Armazenar requisições em cache
)
4.2 Collector.Visit()
Assinatura: func (c *Collector) Visit(URL string) error
O que faz: Inicia uma requisição HTTP GET para a URL especificada. É o ponto de entrada para a raspagem.
err := c.Visit("https://exa Também na biblioteca
Registro em Go (Golang): melhores bibliotecas e soluções para produção
GraphQL em Swift: Guia Completo da Biblioteca Apollo iOS
Cliente HTTP para Swift (iOS/macOS): melhores bibliotecas para trabalhar com rede
Trabalhando com Excel em PHP: bibliotecas PhpSpreadsheet e OpenSpout