mcpField
S
scrapfly-sdk-go

scrapfly-sdk-go

github.com/scrapflyデータ・データベース5191 回インストール2 週間前に更新
リポジトリ

scrapfly-sdk-go について

scrapfly-sdk-goは、GoアプリケーションからScrapfly経由でウェブページを取得するモジュールです。プロキシプール、JavaScriptレンダリング、スクリーンショット、AI抽出に対応し、レスポンス解析用のgoqueryセレクターを内蔵しています。

主な機能

  1. 01Goアプリケーションからのウェブスクレイピング
  2. 02プロキシプールとボット対策回避
  3. 03JavaScriptレンダリングとスクリーンショット
  4. 04AIによる構造化データ抽出
  5. 05goqueryレスポンスセレクター内蔵

活用シーン

  1. 01HTML、JSON、テキスト、Markdownの取得
  2. 02JavaScriptを多用するページのレンダリング
  3. 03ページのスクリーンショット撮影
  4. 04goqueryによるレスポンス解析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scrapfly/skills --skill scrapfly-sdk-go

インストール後、Claude Code で/scrapfly-sdk-goを入力して読み込まれたか確認します。

詳細

Scrapfly Go SDK

go-scrapfly モジュールを使うと、プロキシのローテーション、ボット対策の回避(Unblocker)、JavaScript のレンダリング、スクリーンショットの撮影、AI による抽出を利用して、Go から Web ページをスクレイピングできます。レスポンスを解析するための goquery セレクターが組み込まれています。

使用する場面

  • Go のコードベースから Web ページ(HTML、JSON、テキスト、Markdown)をスクレイピングする場合
  • ボット対策(Cloudflare、DataDome、PerimeterX、Kasada)を回避する場合
  • ヘッドレスブラウザーで JavaScript を多用するページをレンダリングする場合
  • スクリーンショットを撮影したり、構造化データを抽出したりする場合

セットアップ

go get github.com/scrapfly/go-scrapfly
export SCRAPFLY_API_KEY="your-api-key"

パッケージ名は scrapfly です。API キーは scrapfly.io で取得してください。

基本的なスクレイピング

package main

import (
    "fmt"
    "log"
    "os"

    "github.com/scrapfly/go-scrapfly"
)

func main() {
    client, err := scrapfly.New(os.Getenv("SCRAPFLY_API_KEY"))
    if err != nil {
        log.Fatalf("failed to create client: %v", err)
    }

    apiResponse, err := client.Scrape(&scrapfly.ScrapeConfig{
        URL: "https://web-scraping.dev/product/1",
    })
    if err != nil {
        log.Fatalf("scrape failed: %v", err)
    }

    fmt.Println(apiResponse.Result.Content)
}

ボット対策の回避、地域ターゲティング、JS レンダリング

ScrapeConfig のフィールドは、Go の慣例に沿ったパスカルケースです。ProxyPool は型付き文字列です。プールは文字列リテラル "basic"、"unblocker"、"unblocker_ultra"、または "auto" で指定してください。いずれもすべての go-scrapfly リリースで利用できます。

apiResponse, err := client.Scrape(&scrapfly.ScrapeConfig{
    URL:             "https://web-scraping.dev/product/1",
    ProxyPool:       "unblocker",   // residential proxies + the Unblocker (anti-bot bypass)
    Country:         "us",          // proxy country (ISO 3166-1 alpha-2)
    RenderJS:        true,          // headless browser rendering
    WaitForSelector: "div.product", // requires RenderJS
    RenderingWait:   5000,          // ms, requires RenderJS
    Format:          "markdown",    // raw | clean_html | json | markdown | text
})

組み込み HTML セレクター

selector, err := apiResponse.Selector() // goquery document
if err != nil {
    log.Fatal(err)
}
fmt.Println("Title:", selector.Find("h3").First().Text())

スクリーンショットと抽出

shot, err := client.Screenshot(&scrapfly.ScreenshotConfig{
    URL: "https://web-scraping.dev/products",
})

data, err := client.Extract(&scrapfly.ExtractionConfig{
    Body:             []byte(apiResponse.Result.Content),
    ContentType:      "text/html",
    ExtractionPrompt: "extract all product names and prices",
})

重要な注意事項

  • RenderingWait、WaitForSelector、スクリーンショットには RenderJS: true が必要です
  • ProxyPool: "basic" は Unblocker が無効なデータセンタープロキシ、"unblocker" は Unblocker を利用する住宅用プロキシ、"unblocker_ultra" は同じく住宅用プロキシで、独自の料金が設定されているターゲットまたはボット対策が受け付ける唯一のプールです。"auto" を指定すると、API がリクエスト前にターゲットのプロファイルに基づいてプールを選択します。データセンタープロキシで Unblocker を有効にするか、ターゲットが必要とするプールを選択します(unblocker_ultra が必要なターゲットも含め、すべてのターゲットで利用でき、その場合は追加料金がかかります。実行に使用するプールの料金が適用されます)。各プールでは Unblocker 自体が設定されます。独自の料金が設定されているターゲットまたはボット対策に対して basic または unblocker を指定すると、ERR::PROXY::UNBLOCKER_ULTRA_REQUIRED が返されます(HTTP 422。課金されません)。再送信時は ProxyPool: "unblocker_ultra" を指定してください。ScreenshotConfig.ProxyPool は go-scrapfly v1.6.0 より後のリリースで利用できます
  • Unblocker(*bool 型。scrapfly.BoolPtr(true) で設定し、nil は未設定)とその別名である bool 型のフィールド ASP は非推奨です。Unblocker には ProxyPool("unblocker_ultra")を使用してください。移行ガイドでは、プロキシプール導入前に記述されたリクエストについて、プール名 scrapfly.PublicDataCenterPool と scrapfly.PublicResidentialPool を含めて説明しています。どちらのフィールドも API には asp として送信されます。ASP: true を明示すると、Unblocker より優先されます
  • クリーンで LLM に適したコンテンツには Format: "markdown" を使用してください
  • ページ本文は apiResponse.Result.Content から取得し、apiResponse.Selector() で解析してください

コメント