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 Browserclient.Browserscrapeless.WithBrowser()リモートブラウザセッションの作成と管理。
ブラウザプロファイルclient.Profilescrapeless.WithProfile()セッション間でブラウザのデータを保持。
Scraping APIclient.Scrapingscrapeless.WithScraping()ウェブサイトアクターを使用して構造化データを抽出。
Web Unlockerclient.Universalscrapeless.WithUniversal()保護されたウェブサイトからコンテンツを取得。
クローリングclient.Crawlscrapeless.WithCrawl()ページをスクレイピングまたはウェブサイトをクロール。
Google Search APIclient.DeepSerpscrapeless.WithDeepSerp()検索エンジンの結果を抽出。
Proxiesclient.Proxyscrapeless.WithProxy()プロキシ接続URLを生成。
AI Scraperclient.AIScraperscrapeless.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_URLhttps://api.scrapeless.com
SCRAPELESS_BROWSER_API_URLhttps://browser.scrapeless.com
SCRAPELESS_CRAWL_API_URLhttps://api.scrapeless.com

サポート

SDKは MITライセンスの下でリリースされています。

関連プロジェクト