Go SDK

Visão geral

O Scrapeless Go SDK oficial fornece acesso a automação de navegador, scraping, crawling, proxies, resultados de pesquisa e extração de chat de IA. Este guia segue o README do repositório do SDK, com exemplos executáveis e detalhes de configuração.

Requisitos

É necessário Go 1.24.0 ou posterior, conforme o go.mod do repositório. Execute o comando de instalação dentro de um módulo Go. Para um novo projeto, inicialize um com go mod init example.com/scrapeless-demo.

Instalação

go get -u github.com/scrapeless-ai/sdk-go

Autenticação / Chave de API

Faça login no painel do Scrapeless e crie uma chave de API. Exporte-a antes de executar os exemplos:

export SCRAPELESS_API_KEY="YOUR_API_KEY"

Mantenha sua chave de API no seu ambiente ou gerenciador de segredos em vez de confirmá-la no controle de versão.

Início rápido

Salve isto como main.go e execute go run . após configurar sua chave de API. Ative cada serviço com a opção With...() correspondente e feche o cliente quando terminar.

package main
 
import (
    "context"
    "fmt"
    "log"
 
    "github.com/scrapeless-ai/sdk-go/scrapeless"
    "github.com/scrapeless-ai/sdk-go/scrapeless/services/universal"
)
 
func main() {
    client := scrapeless.New(scrapeless.WithUniversal())
    defer client.Close()
 
    result, err := client.Universal.CreateTask(context.Background(), universal.UniversalTaskRequest{
        Actor: universal.ScraperUniversal,
        Input: map[string]any{
            "url": "https://example.com",
            "method": "GET",
            "redirect": false,
        },
    })
    if err != nil {
        log.Print(err)
        return
    }
    fmt.Printf("%+v\n", result)
}

Matriz de cobertura de produtos

ProdutoServiço do SDKAtivar comCobertura
Agent Browserclient.Browserscrapeless.WithBrowser()Criar e gerenciar sessões de navegador remotas.
Browser Profilesclient.Profilescrapeless.WithProfile()Persistir dados do navegador entre sessões.
Scraping APIclient.Scrapingscrapeless.WithScraping()Extrair dados estruturados usando actors de sites.
Web Unlockerclient.Universalscrapeless.WithUniversal()Recuperar conteúdo de sites protegidos.
Crawlclient.Crawlscrapeless.WithCrawl()Fazer scraping de uma página ou crawling de um site.
Google Search APIclient.DeepSerpscrapeless.WithDeepSerp()Extrair resultados de mecanismos de busca.
Proxiesclient.Proxyscrapeless.WithProxy()Gerar URLs de conexão de proxy.
AI Scraperclient.AIScraperscrapeless.WithAIScraper()Criar tarefas de chat de IA e recuperar seu status e resultados.

Os serviços são opcionais. Por exemplo, inicialize o suporte a navegador e AI Scraper com scrapeless.New(scrapeless.WithBrowser(), scrapeless.WithAIScraper()). O README também documenta Client.Captcha, Client.Server e Client.Router para fluxos de trabalho adicionais.

Exemplos de uso

Browser

package main
 
import (
	"context"
	"github.com/scrapeless-ai/sdk-go/scrapeless"
	"github.com/scrapeless-ai/sdk-go/scrapeless/log"
	"github.com/scrapeless-ai/sdk-go/scrapeless/services/browser"
)
 
func main() {
	client := scrapeless.New(scrapeless.WithBrowser())
	defer client.Close()
 
	browserInfo, err := client.Browser.Create(context.Background(), browser.Actor{
		Input:        browser.Input{SessionTtl: "180"},
		ProxyCountry: "US",
	})
	if err != nil {
		panic(err)
	}
	log.Infof("%+v", browserInfo)
}

Browser Profile

package main
 
import (
	"context"
	"fmt"
	"github.com/scrapeless-ai/sdk-go/scrapeless"
)
 
func main() {
	client := scrapeless.New(scrapeless.WithProfile())
	defer client.Close()
 
	result, err := client.Profile.CreateProfile(context.Background(), "My Profile")
	if err != nil {
		panic(err)
	}
	fmt.Printf("%+v\n", result)
}

Scraping API

package main
 
import (
	"context"
	"github.com/scrapeless-ai/sdk-go/scrapeless"
	"github.com/scrapeless-ai/sdk-go/scrapeless/log"
	"github.com/scrapeless-ai/sdk-go/scrapeless/services/scraping"
)
 
func main() {
	client := scrapeless.New(scrapeless.WithScraping())
	defer client.Close()
 
	scrape, err := client.Scraping.Scrape(context.Background(), scraping.ScrapingTaskRequest{
		Actor: "scraper.google.search",
		Input: map[string]interface{}{
			"q": "nike site:www.nike.com",
		},
		ProxyCountry: "US",
	})
	if err != nil {
		log.Errorf("scraping create err:%v", err)
		return
	}
	log.Infof("%+v", scrape)
}

Web Unlocker

Extraia dados de sites usando o Web Unlocker (exposto como client.Universal).

package main
 
import (
	"context"
	"fmt"
	"github.com/scrapeless-ai/sdk-go/scrapeless"
	"github.com/scrapeless-ai/sdk-go/scrapeless/services/universal"
)
 
func main() {
	client := scrapeless.New(scrapeless.WithUniversal())
	defer client.Close()
 
	result, err := client.Universal.CreateTask(context.Background(), universal.UniversalTaskRequest{
		Actor: universal.ScraperUniversal,
		Input: map[string]any{
			"url":      "https://example.com",
			"method":   "GET",
			"redirect": false,
		},
	})
	if err != nil {
		panic(err)
	}
	fmt.Printf("%+v\n", result)
}

Crawl

package main
 
import (
	"context"
	"github.com/scrapeless-ai/sdk-go/scrapeless"
	"github.com/scrapeless-ai/sdk-go/scrapeless/log"
	"github.com/scrapeless-ai/sdk-go/scrapeless/services/crawl"
)
 
func main() {
	client := scrapeless.New(scrapeless.WithCrawl())
	defer client.Close()
 
	// Crawl
	response, err := client.Crawl.CrawlUrl(context.Background(), "https://redditinc.com/blog", crawl.CrawlParams{
		Limit: 10,
		ScrapeOptions: crawl.ScrapeOptions{
			Formats: []string{"links",
				"markdown",
				"html",
				"screenshot"},
		},
		BrowserOptions: crawl.ICreateBrowser{
			SessionName:      "Crawl",
			SessionTTL:       "900",
			SessionRecording: "true",
			ProxyCountry:     "ANY",
		},
	})
	if err != nil {
		panic(err)
	}
	log.Infof("Crawl response: %v", response)
 
	// scrape
	scrapeResponse, err := client.Crawl.ScrapeUrl(context.Background(), "https://docs.scrapeless.com/en/docs/get-started/overview/", crawl.ScrapeOptions{
		BrowserOptions: crawl.ICreateBrowser{
			SessionName:      "Crawl",
			SessionTTL:       "900",
			SessionRecording: "true",
			ProxyCountry:     "ANY",
		},
	})
	if err != nil {
		panic(err)
	}
	log.Infof("Scrape response: %v", scrapeResponse)
}

Proxy

package main
 
import (
	"context"
	"fmt"
	"github.com/scrapeless-ai/sdk-go/scrapeless"
	"github.com/scrapeless-ai/sdk-go/scrapeless/services/proxies"
)
 
func main() {
	client := scrapeless.New(scrapeless.WithProxy())
	defer client.Close()
 
	result, err := client.Proxy.Proxy(context.Background(), proxies.ProxyActor{
		Country:         "US",
		SessionDuration: 30,
		SessionId:       "my-session",
		Gateway:         "your-proxy-gateway:port",
	})
	if err != nil {
		panic(err)
	}
	fmt.Printf("%+v\n", result)
}

AI Scraper

Extraia conteúdo de chat de IA em massa para monitorar menções à marca, comparar respostas e analisar inteligência competitiva a partir dos modelos mais recentes. Recupere URLs, prompts, respostas em Markdown, citações e muito mais por meio de uma única integração.

Os actors suportados incluem scraper.chatgpt, scraper.perplexity, scraper.copilot, scraper.gemini, scraper.aimode, scraper.overview, scraper.grok e scraper.alexa. O JSON de input depende do actor; consulte a documentação do AI Scraper para obter parâmetros detalhados. O JSON opcional de webhook contém uma url de callback.

package main
 
import (
	"context"
	"encoding/json"
	"fmt"
 
	"github.com/scrapeless-ai/sdk-go/scrapeless"
	"github.com/scrapeless-ai/sdk-go/scrapeless/services/aiscraper"
)
 
func main() {
	client := scrapeless.New(scrapeless.WithAIScraper()) // Uses SCRAPELESS_API_KEY
	defer client.Close()
	ctx := context.Background()
 
	task, err := client.AIScraper.CreateTask(ctx, aiscraper.TaskRequest{
		Actor: "scraper.chatgpt",
		Input: map[string]any{
			"prompt":     "Most reliable proxy service for data extraction",
			"country":    "US",
			"web_search": true,
		},
		// Optional: Webhook: map[string]any{"url": "https://your-webhook.example.com"},
	})
	if err != nil {
		panic(err)
	}
	fmt.Println("Created task:", string(task))
 
	var created struct {
		TaskID string `json:"task_id"`
	}
	if err := json.Unmarshal(task, &created); err != nil {
		panic(err)
	}
	result, err := client.AIScraper.GetTaskResult(ctx, created.TaskID)
	if err != nil {
		panic(err)
	}
	fmt.Println("Task status and result:", string(result))
	// If status is "running", call GetTaskResult again later.
	// If status is "failed", message contains the failure reason.
}

Ambos os métodos retornam o JSON da API sem alterações. A criação retorna task_id, status e, quando disponível, task_result. A recuperação do resultado retorna status, task_result quando disponível e message em caso de falha. O status é success, failed ou running; o SDK não faz polling automaticamente.

As respostas são bytes JSON brutos ([]byte), preservando todos os campos da API. Decodifique-as com encoding/json conforme necessário.

Google Search API

package main
 
import (
	"context"
	scrapeless "github.com/scrapeless-ai/sdk-go/scrapeless"
	"github.com/scrapeless-ai/sdk-go/scrapeless/log"
	"github.com/scrapeless-ai/sdk-go/scrapeless/services/deepserp"
)
 
func main() {
	client := scrapeless.New(scrapeless.WithDeepSerp())
	defer client.Close()
 
	scrape, err := client.DeepSerp.Scrape(context.Background(), deepserp.DeepserpTaskRequest{
		Actor: "scraper.google.search",
		Input: map[string]interface{}{
			"q": "nike site:www.nike.com",
		},
		ProxyCountry: "US",
	})
	if err != nil {
		log.Errorf("scraping create err:%v", err)
		return
	}
	log.Infof("%+v", scrape)
}

Para integrações mais completas, navegue pelo diretório de exemplos do repositório.

Tratamento de erros

Verifique o error retornado antes de usar a resposta de um serviço. Use um deadline de contexto para limitar solicitações individuais e defer client.Close() para liberar os recursos do cliente.

Este exemplo recupera uma tarefa existente do AI Scraper. Substitua YOUR_TASK_ID pelo ID retornado por CreateTask.

package main
 
import (
    "context"
    "fmt"
    "log"
    "time"
 
    "github.com/scrapeless-ai/sdk-go/scrapeless"
)
 
func main() {
    client := scrapeless.New(scrapeless.WithAIScraper())
    defer client.Close()
 
    ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
    defer cancel()
 
    result, err := client.AIScraper.GetTaskResult(ctx, "YOUR_TASK_ID")
    if err != nil {
        log.Printf("Could not retrieve task: %v", err)
        return
    }
    fmt.Println(string(result))
}

Falhas HTTP do AI Scraper retornam um erro. Uma solicitação HTTP bem-sucedida ainda pode conter uma tarefa com status: "failed"; inspecione os campos status e message da resposta após decodificar o JSON.

Configuração / Variáveis de ambiente

A chave de API é obrigatória. As substituições de endpoint são opcionais; a tabela mostra seus valores padrão.

Defina as variáveis de ambiente antes de iniciar o programa. O SDK também lê um arquivo .env do diretório de trabalho. As solicitações do AI Scraper têm um timeout HTTP de 30 segundos; use context.WithTimeout para um deadline por solicitação menor.

Variável de ambienteFinalidade / padrão
SCRAPELESS_API_KEYChave de API obrigatória, obtida no painel.
SCRAPELESS_BASE_API_URLhttps://api.scrapeless.com
SCRAPELESS_BROWSER_API_URLhttps://browser.scrapeless.com
SCRAPELESS_CRAWL_API_URLhttps://api.scrapeless.com

Suporte

O SDK é lançado sob a Licença MIT.

Projetos relacionados