Go SDK

Tổng quan

Scrapeless Go SDK chính thức cung cấp quyền truy cập vào tự động hóa trình duyệt, thu thập dữ liệu, crawling, proxies, kết quả tìm kiếm và trích xuất trò chuyện AI. Hướng dẫn này bám theo README của kho lưu trữ SDK, với các ví dụ có thể chạy được và chi tiết cấu hình.

Yêu cầu

Kho lưu trữ go.mod yêu cầu Go 1.24.0 trở lên. Chạy lệnh cài đặt bên trong một Go module. Đối với một dự án mới, hãy khởi tạo module bằng go mod init example.com/scrapeless-demo.

Cài đặt

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

Xác thực / API Key

Đăng nhập vào bảng điều khiển Scrapeless và tạo một API key. Xuất nó ra trước khi chạy các ví dụ:

export SCRAPELESS_API_KEY="YOUR_API_KEY"

Hãy giữ API key của bạn trong môi trường hoặc trình quản lý bí mật thay vì đưa nó vào hệ thống quản lý mã nguồn.

Bắt đầu nhanh

Lưu nội dung sau thành main.go và chạy go run . sau khi thiết lập API key của bạn. Bật từng dịch vụ bằng tùy chọn With...() tương ứng và đóng client khi hoàn tất.

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)
}

Ma trận phạm vi sản phẩm

Sản phẩmDịch vụ SDKBật bằngPhạm vi
Agent Browserclient.Browserscrapeless.WithBrowser()Tạo và quản lý các phiên trình duyệt từ xa.
Browser Profilesclient.Profilescrapeless.WithProfile()Lưu trữ dữ liệu trình duyệt xuyên suốt các phiên.
Scraping APIclient.Scrapingscrapeless.WithScraping()Trích xuất dữ liệu có cấu trúc bằng các actor website.
Web Unlockerclient.Universalscrapeless.WithUniversal()Truy xuất nội dung từ các website được bảo vệ.
Crawlclient.Crawlscrapeless.WithCrawl()Thu thập một trang hoặc crawl một website.
Google Search APIclient.DeepSerpscrapeless.WithDeepSerp()Trích xuất kết quả từ công cụ tìm kiếm.
Proxiesclient.Proxyscrapeless.WithProxy()Tạo các URL kết nối proxy.
AI Scraperclient.AIScraperscrapeless.WithAIScraper()Tạo các tác vụ trò chuyện AI và truy xuất trạng thái cùng kết quả của chúng.

Các dịch vụ được kích hoạt theo lựa chọn (opt-in). Ví dụ, khởi tạo hỗ trợ cho cả trình duyệt và AI Scraper bằng scrapeless.New(scrapeless.WithBrowser(), scrapeless.WithAIScraper()). README cũng ghi lại Client.Captcha, Client.Server và Client.Router cho các quy trình bổ sung.

Ví dụ sử dụng

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

Trích xuất dữ liệu từ các website bằng Web Unlocker (được cung cấp dưới dạng 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

Trích xuất nội dung trò chuyện AI hàng loạt để theo dõi lượt nhắc đến thương hiệu, so sánh câu trả lời và phân tích thông tin cạnh tranh từ các mô hình mới nhất. Truy xuất URL, prompt, câu trả lời dạng Markdown, trích dẫn và nhiều hơn nữa thông qua một tích hợp duy nhất.

Các actor được hỗ trợ bao gồm scraper.chatgpt, scraper.perplexity, scraper.copilot, scraper.gemini, scraper.aimode, scraper.overview, scraper.grok và scraper.alexa. Phần input JSON phụ thuộc vào actor; xem tài liệu AI Scraper để biết các tham số chi tiết. Phần webhook JSON tùy chọn chứa một url 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.
}

Cả hai phương thức đều trả về JSON của API không thay đổi. Việc tạo tác vụ trả về task_id, status, và khi có sẵn, task_result. Việc truy xuất kết quả trả về status, task_result khi có sẵn, và message khi thất bại. Trạng thái là success, failed hoặc running; SDK không tự động poll.

Các phản hồi là các byte JSON thô ([]byte), giữ nguyên mọi trường của API. Giải mã chúng bằng encoding/json khi cần.

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)
}

Để có các tích hợp đầy đủ hơn, hãy tham khảo thư mục ví dụ của kho lưu trữ.

Xử lý lỗi

Kiểm tra error được trả về trước khi sử dụng phản hồi của một dịch vụ. Sử dụng context deadline để giới hạn từng yêu cầu riêng lẻ và defer client.Close() để giải phóng tài nguyên của client.

Ví dụ này truy xuất một tác vụ AI Scraper đã tồn tại. Thay YOUR_TASK_ID bằng ID được trả về bởi 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))
}

Các lỗi HTTP của AI Scraper sẽ trả về một error. Một yêu cầu HTTP thành công vẫn có thể chứa một tác vụ với status: "failed"; hãy kiểm tra các trường status và message của phản hồi sau khi giải mã JSON.

Cấu hình / Biến môi trường

API key là bắt buộc. Việc ghi đè endpoint là tùy chọn; bảng dưới đây cho thấy các giá trị mặc định của chúng.

Thiết lập các biến môi trường trước khi khởi động chương trình. SDK cũng đọc một tệp .env từ thư mục làm việc. Các yêu cầu AI Scraper có thời gian chờ HTTP là 30 giây; sử dụng context.WithTimeout để đặt một deadline ngắn hơn cho từng yêu cầu.

Biến môi trườngMục đích / mặc định
SCRAPELESS_API_KEYAPI key bắt buộc từ bảng điều khiển.
SCRAPELESS_BASE_API_URLhttps://api.scrapeless.com
SCRAPELESS_BROWSER_API_URLhttps://browser.scrapeless.com
SCRAPELESS_CRAWL_API_URLhttps://api.scrapeless.com

Hỗ trợ

SDK được phát hành theo Giấy phép MIT.

Các dự án liên quan