Como usar geziyor para Web Scraping

Emma Foster
Machine Learning Engineer
27-Sep-2024
Geziyor: Uma Estrutura Poderosa de Raspagem da Web para Go
Geziyor é uma estrutura moderna de raspagem da web para Go, projetada para oferecer ferramentas poderosas para raspar sites e extrair dados de forma eficiente. Ao contrário de muitas bibliotecas de raspagem tradicionais, o Geziyor enfatiza a facilidade de uso, ao mesmo tempo em que fornece fluxos de trabalho de raspagem altamente personalizáveis.
Recursos Chave:
- Suporte à Concorrência: Ele suporta operações assíncronas, permitindo que você raspa várias páginas simultaneamente, o que aumenta o desempenho.
- Personalização de Solicitações: Modifique facilmente as solicitações HTTP, incluindo cabeçalhos, cookies e parâmetros personalizados.
- Controle Automático: Ajuda a evitar a ativação de mecanismos anti-raspagem ao espaçar as solicitações para os servidores.
- Cache e Persistência Integrados: Ele suporta o cache de dados raspados e respostas para evitar solicitações redundantes.
- Extensibilidade: Oferece ganchos para estender a funcionalidade ou lidar com eventos como interceptação de solicitação/resposta, middlewares personalizados e muito mais.
- Suporta Proxies: Integre facilmente proxies para girar IPs ou contornar restrições.
Pré-requisitos
Para usar o Geziyor, certifique-se de que você tenha:
- Go 1.12+ instalado a partir do site oficial do Go.
- Conhecimento básico da linguagem Go.
Instalação
Para instalar o Geziyor, você pode executar:
bash
go get -u github.com/geziyor/geziyor
Exemplo Básico: Raspagem da Web com Geziyor
Aqui está um exemplo simples para raspar um site e imprimir os títulos dos artigos:
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"github.com/PuerkitoBio/goquery"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://news.ycombinator.com"},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
r.HTMLDoc.Find(".storylink").Each(func(i int, s *goquery.Selection) {
log.Println(s.Text())
})
},
}).Start()
}
Exemplo Avançado: Raspagem com Cabeçalhos Personalizados e Solicitações POST
Às vezes, você precisa simular uma interação mais complexa com o servidor, como fazer login ou interagir com sites dinâmicos. Neste exemplo, mostraremos como enviar um cabeçalho personalizado e uma solicitação POST.
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
Method: "POST",
URL: "https://httpbin.org/post",
Body: []byte(`{"username": "test", "password": "123"}`),
Headers: map[string]string{
"Content-Type": "application/json",
},
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println(string(r.Body))
},
}).Start()
}
Lidando com Cookies e Sessões no Geziyor
Você pode precisar gerenciar cookies ou manter sessões durante a raspagem. O Geziyor simplifica o gerenciamento de cookies ao lidar automaticamente com cookies para cada solicitação, e você também pode personalizar o processo de gerenciamento de cookies se necessário.
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
URL: "https://httpbin.org/cookies/set?name=value",
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println("Cookies:", r.Cookies())
},
}).Start()
}
Usando Proxies com Geziyor
Para raspar um site, evitando restrições ou bloqueios de IP, você pode direcionar suas solicitações por meio de um proxy. Aqui está como configurar o suporte de proxy com o Geziyor:
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
URL: "https://httpbin.org/ip",
Proxy: "http://username:password@proxyserver:8080",
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println(string(r.Body))
},
}).Start()
}
Lidando com Captchas com Geziyor
Embora o Geziyor não resolva captchas nativamente, você pode integrá-lo com um serviço de resolução de captcha, como o CapSolver. Aqui está como você pode usar o CapSolver para resolver captchas em conjunto com o Geziyor.
Exemplo: Resolvendo ReCaptcha V2 Usando Geziyor e CapSolver
Primeiro, você precisa integrar o CapSolver e lidar com solicitações para desafios de captcha.
go
package main
import (
"encoding/json"
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
"time"
)
const CAPSOLVER_KEY = "YourKey"
func createTask(url, key string) (string, error) {
payload := map[string]interface{}{
"clientKey": CAPSOLVER_KEY,
"task": map[string]interface{}{
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": url,
"websiteKey": key,
},
}
response, err := client.NewRequest().
Method("POST").
URL("https://api.capsolver.com/createTask").
JSON(payload).
Do()
if err != nil {
return "", err
}
var result map[string]interface{}
json.Unmarshal(response.Body, &result)
return result["taskId"].(string), nil
}
func getTaskResult(taskId string) (string, error) {
payload := map[string]interface{}{
"clientKey": CAPSOLVER_KEY,
"taskId": taskId,
}
for {
response, err := client.NewRequest().
Method("POST").
URL("https://api.capsolver.com/getTaskResult").
JSON(payload).
Do()
if err != nil {
return "", err
}
var result map[string]interface{}
json.Unmarshal(response.Body, &result)
if result["status"] == "ready" {
return result["solution"].(string), nil
}
time.Sleep(5 * time.Second)
}
}
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
taskId, _ := createTask("https://example.com", "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf")
solution, _ := getTaskResult(taskId)
g.Do(&client.Request{
Method: "POST",
URL: "https://example.com/submit",
Body: []byte(`g-recaptcha-response=` + solution),
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println("Captcha Solved:", string(r.Body))
},
}).Start()
}
Otimizações de Desempenho com Geziyor
O Geziyor se destaca no tratamento de tarefas de raspagem de alto volume, mas o desempenho pode ser ainda mais otimizado ajustando algumas opções:
- Concorrência: Aumente
ConcurrentRequestspara permitir várias solicitações paralelas. - Atraso na Solicitação: Implemente um atraso entre as solicitações para evitar a detecção.
Exemplo com concorrência e atraso:
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://example.com"},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {},
ConcurrentRequests: 10,
RequestDelay: 2,
}).Start()
}
Código Bônus
Pegue seu Código Bônus para as melhores soluções de captcha no CapSolver: scrape. Depois de resgatá-lo, você receberá um bônus extra de 5% após cada recarga, ilimitadas vezes.

Conclusão
O Geziyor é uma estrutura de raspagem da web poderosa, rápida e flexível para Go, tornando-a uma ótima escolha para desenvolvedores que desejam construir sistemas de raspagem escalonáveis. Seu suporte integrado para concorrência, solicitações personalizáveis e a capacidade de integrar com serviços externos como o CapSolver tornam-na uma ferramenta ideal para tarefas de raspagem simples e avançadas.
Se você está coletando dados de blogs, sites de comércio eletrônico ou construindo pipelines de raspagem personalizados, o Geziyor possui os recursos de que você precisa para começar rapidamente e com eficiência.
Declaração de Conformidade: As informações fornecidas neste blog são apenas para fins informativos. A CapSolver está comprometida em cumprir todas as leis e regulamentos aplicáveis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas é estritamente proibido e será investigado. Nossas soluções de resolução de captcha melhoram a experiência do usuário enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados públicos. Incentivamos o uso responsável de nossos serviços. Para mais informações, visite nossos Termos de Serviço e Política de Privacidade.
Mais

Qual é a melhor extensão para resolver CAPTCHA 2026?
No mundo em constante evolução da segurança online, os desafios CAPTCHA tornaram-se uma barreira comum para os usuários da internet...

Sora Fujimoto
12-Dec-2025

Lumiproxy: Proxy Premium para Scraping de Web e Coleta de Dados
Neste artigo, mostraremos o que é Lumiproxy e os serviços que eles oferecem.

Ethan Collins
12-Dec-2025

Genlogin: Revolutionar sua experiência de automação da web
Neste artigo, vamos mostrar para você o que é o Genlogin e os serviços que eles oferecem.

Rajinder Singh
12-Dec-2025

Proxys.io: Proxies individuais para qualquer tarefa
Neste artigo, vamos mostrar para você o que é o Proxys.io e os serviços que eles oferecem.

Rajinder Singh
12-Dec-2025

Tabproxy: Bom custo proxy residencial internacional
Neste artigo, vamos mostrar para você o que é o Tabproxy e os serviços que eles oferecem.

Ethan Collins
12-Dec-2025

O que são erros 402, 403, 404 e 429 em raspagem de web? Um Guia Completo
Domine o tratamento de erros de raspagem de web entendendo o que são os erros 402, 403, 404 e 429. Aprenda a corrigir o erro 403 Proibido, implementar soluções para o erro de limitação de taxa 429 e tratar o código de status Payment Required emergente 402.

Lucas Mitchell
12-Dec-2025

