Go SDK
概要
公式のScrapelessGo SDKクライアントは、ブラウザ自動化、スクレイピング、クロール、プロキシ、検索結果、AIチャット抽出にアクセスできます。このガイドは SDKリポジトリのREADMEに従っており、実行可能な例と設定の詳細が含まれています。
必要条件
リポジトリの go.modにより、Go 1.24.0以降が必要です。Goモジュール内でのみインストールコマンドを実行してください。新しいプロジェクトの場合は、 go mod init example.com/scrapeless-demoで初期化します。
インストール
go get -u github.com/scrapeless-ai/sdk-go認証 / APIキー
Scrapelessダッシュボード にログインし、APIキーを作成します。例を実行する前にそのキーをエクスポートしてください。
export SCRAPELESS_API_KEY="YOUR_API_KEY"ソース管理にコミットする代わりに、APIキーは環境変数またはシークレットマネージャーに保存してください。
クイックスタート
このコードを main.go として保存します。実行コマンドは go run . で、あらかじめAPIキーを設定してください。各サービスは対応する With...() オプションで有効にし、処理が終わったらクライアントを閉じます。
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)
}製品対応マトリクス
| 製品 | SDKサービス | 有効化オプション | 対応範囲 |
|---|---|---|---|
| Scraping Browser | client.Browser | scrapeless.WithBrowser() | リモートブラウザセッションの作成と管理。 |
| ブラウザプロファイル | client.Profile | scrapeless.WithProfile() | セッション間でブラウザのデータを保持。 |
| Scraping API | client.Scraping | scrapeless.WithScraping() | ウェブサイトアクターを使用して構造化データを抽出。 |
| Web Unlocker | client.Universal | scrapeless.WithUniversal() | 保護されたウェブサイトからコンテンツを取得。 |
| クローリング | client.Crawl | scrapeless.WithCrawl() | ページをスクレイピングまたはウェブサイトをクロール。 |
| Google Search API | client.DeepSerp | scrapeless.WithDeepSerp() | 検索エンジンの結果を抽出。 |
| Proxies | client.Proxy | scrapeless.WithProxy() | プロキシ接続URLを生成。 |
| AI Scraper | client.AIScraper | scrapeless.WithAIScraper() | AIチャットタスクを作成し、そのステータスと結果を取得。 |
サービスはオプトインです。たとえば、ブラウザとAI Scraperの両方をサポートするには scrapeless.New(scrapeless.WithBrowser(), scrapeless.WithAIScraper())と初期化します。READMEには、追加のワークフロー用に Client.Captcha、 Client.Server、 Client.Router についても記載されています。
使用例
ブラウザ
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)
}ブラウザプロファイル
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
Web Unlockerを使用して( 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)
}クローリング
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)
}プロキシ
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
AIチャットのコンテンツを一括抽出して、ブランドの言及を監視したり、回答を比較したり、最新モデルからの競合情報分析を行ったりできます。1つの統合でURL、プロンプト、Markdown形式の回答、引用文献などを取得できます。
サポートされているアクターには scraper.chatgpt、 scraper.perplexity、 scraper.copilot、 scraper.gemini、 scraper.aimode、 scraper.overview、 scraper.grok、 scraper.alexaが含まれます。 input JSONの動作は使用するactorに依存します。詳細なパラメータについては AI Scraperドキュメント を参照してください。オプションの webhook JSONにはコールバック urlが含まれます。
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.
}どちらのメソッドも、APIJSONを変更せずに返します。作成時には task_id、 status、および利用可能な場合は task_resultを返します。結果の取得時には、利用可能な場合は status、 task_result を返し、失敗時には message を返します。ステータスは success、 failed、または runningです。SDKは自動的にポーリングしません。
レスポンスは生のJSONバイト([]byte)であり、すべてのAPIフィールドが保持されます。必要に応じて encoding/json でデコードしてください。
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)
}より完全な統合については、リポジトリの サンプルのディレクトリを参照してください。
エラー処理
サービスのレスポンスを使用する前に返された error を確認してください。個々のリクエストにタイムアウトを設定し、 defer client.Close() でクライアントリソースを解放してください。
この例では、既存のAI Scraperタスクを取得します。 YOUR_TASK_ID を CreateTaskが返したIDに置き換えてください。
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))
}AI ScraperのHTTPリクエストが失敗すると、エラーが返されます。HTTPリクエスト自体が成功しても、タスクの状態が status: "failed"となる場合があります。レスポンスの status フィールドと message フィールドを、JSONのデコード後に確認してください。
設定 / 環境変数
APIキーは必須です。エンドポイントの上書きは任意です。表にはデフォルト値が示されています。
プログラムを開始する前に環境変数を設定してください。SDKはワーキングディレクトリの .env ファイルも読み込みます。AI Scraperリクエストには30秒のHTTPタイムアウトがあります。リクエストごとのより短いタイムアウトには context.WithTimeout を使用してください。
| 環境変数 | 目的 / デフォルト値 |
|---|---|
SCRAPELESS_API_KEY | ダッシュボードからの必須のAPIキー。 |
SCRAPELESS_BASE_API_URL | https://api.scrapeless.com |
SCRAPELESS_BROWSER_API_URL | https://browser.scrapeless.com |
SCRAPELESS_CRAWL_API_URL | https://api.scrapeless.com |
サポート
SDKは MITライセンスの下でリリースされています。