CAPSOLVER
Blog
Como usar geziyor para Web Scraping

Como usar geziyor para Web Scraping

Logo of CapSolver

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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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 ConcurrentRequests para 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 Copy
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