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-goXá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ẩm | Dịch vụ SDK | Bật bằng | Phạm vi |
|---|---|---|---|
| Agent Browser | client.Browser | scrapeless.WithBrowser() | Tạo và quản lý các phiên trình duyệt từ xa. |
| Browser Profiles | client.Profile | scrapeless.WithProfile() | Lưu trữ dữ liệu trình duyệt xuyên suốt các phiên. |
| Scraping API | client.Scraping | scrapeless.WithScraping() | Trích xuất dữ liệu có cấu trúc bằng các actor website. |
| Web Unlocker | client.Universal | scrapeless.WithUniversal() | Truy xuất nội dung từ các website được bảo vệ. |
| Crawl | client.Crawl | scrapeless.WithCrawl() | Thu thập một trang hoặc crawl một website. |
| Google Search API | client.DeepSerp | scrapeless.WithDeepSerp() | Trích xuất kết quả từ công cụ tìm kiếm. |
| Proxies | client.Proxy | scrapeless.WithProxy() | Tạo các URL kết nối proxy. |
| AI Scraper | client.AIScraper | scrapeless.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ường | Mục đích / mặc định |
|---|---|
SCRAPELESS_API_KEY | API key bắt buộc từ bảng điều khiển. |
SCRAPELESS_BASE_API_URL | https://api.scrapeless.com |
SCRAPELESS_BROWSER_API_URL | https://browser.scrapeless.com |
SCRAPELESS_CRAWL_API_URL | https://api.scrapeless.com |
Hỗ trợ
- Mã nguồn SDK và README
- Báo cáo sự cố
- Tài liệu Scrapeless
- Tham gia cộng đồng Discord
- Hỗ trợ qua email
SDK được phát hành theo Giấy phép MIT.