scrapfly-sdk-go について
scrapfly-sdk-goは、GoアプリケーションからScrapfly経由でウェブページを取得するモジュールです。プロキシプール、JavaScriptレンダリング、スクリーンショット、AI抽出に対応し、レスポンス解析用のgoqueryセレクターを内蔵しています。
主な機能
- 01Goアプリケーションからのウェブスクレイピング
- 02プロキシプールとボット対策回避
- 03JavaScriptレンダリングとスクリーンショット
- 04AIによる構造化データ抽出
- 05goqueryレスポンスセレクター内蔵
活用シーン
- 01HTML、JSON、テキスト、Markdownの取得
- 02JavaScriptを多用するページのレンダリング
- 03ページのスクリーンショット撮影
- 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()で解析してください
コメント
Markdown 対応