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-goAutenticaçã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
| Produto | Serviço do SDK | Ativar com | Cobertura |
|---|---|---|---|
| Agent Browser | client.Browser | scrapeless.WithBrowser() | Criar e gerenciar sessões de navegador remotas. |
| Browser Profiles | client.Profile | scrapeless.WithProfile() | Persistir dados do navegador entre sessões. |
| Scraping API | client.Scraping | scrapeless.WithScraping() | Extrair dados estruturados usando actors de sites. |
| Web Unlocker | client.Universal | scrapeless.WithUniversal() | Recuperar conteúdo de sites protegidos. |
| Crawl | client.Crawl | scrapeless.WithCrawl() | Fazer scraping de uma página ou crawling de um site. |
| Google Search API | client.DeepSerp | scrapeless.WithDeepSerp() | Extrair resultados de mecanismos de busca. |
| Proxies | client.Proxy | scrapeless.WithProxy() | Gerar URLs de conexão de proxy. |
| AI Scraper | client.AIScraper | scrapeless.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 ambiente | Finalidade / padrão |
|---|---|
SCRAPELESS_API_KEY | Chave de API obrigatória, obtida no painel. |
SCRAPELESS_BASE_API_URL | https://api.scrapeless.com |
SCRAPELESS_BROWSER_API_URL | https://browser.scrapeless.com |
SCRAPELESS_CRAWL_API_URL | https://api.scrapeless.com |
Suporte
- Código-fonte e README do SDK
- Relatar um problema
- Documentação do Scrapeless
- Entrar na comunidade do Discord
- Suporte por e-mail
O SDK é lançado sob a Licença MIT.