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. 01从 Go 应用抓取网页
  2. 02代理池与反爬绕过
  3. 03JavaScript 渲染与截图
  4. 04AI 辅助结构化提取
  5. 05内置 goquery 响应选择器

适用场景

  1. 01抓取 HTML、JSON、文本或 Markdown
  2. 02渲染含大量 JavaScript 的网页
  3. 03截取网页图像
  4. 04使用 goquery 解析响应

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/scrapfly-sdk-go确认已加载。

详细介绍

Scrapfly Go SDK

使用 go-scrapfly 模块在 Go 中抓取网页,支持代理轮换、反机器人绕过(Unblocker)、JavaScript 渲染、截图和 AI 提取。 模块内置 goquery 选择器,可用于解析响应。

适用场景

  • 在 Go 代码库中抓取网页(HTML、JSON、文本、Markdown)
  • 绕过反机器人防护(Cloudflare、DataDome、PerimeterX、Kasada)
  • 使用无头浏览器渲染 JavaScript 密集型页面
  • 截取屏幕截图或提取结构化数据

设置

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

包名为 scrapfly。在 scrapfly.io 获取 API 密钥。

基本抓取

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 惯用的 PascalCase 命名。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 随 v1.6.0 之后的 go-scrapfly 版本提供
  • Unblocker(类型为 *bool,使用 scrapfly.BoolPtr(true) 设置,nil 表示未设置)及其别名普通 bool 字段 ASP 已弃用:请使用 ProxyPool(Unblocker 对应的值为 "unblocker_ultra")。迁移指南介绍了代理池出现前编写的请求,包括代理池名称 scrapfly.PublicDataCenterPool 和 scrapfly.PublicResidentialPool。这两个字段都会以 asp 发送给 API;显式设置 ASP: true 时优先于 Unblocker
  • 使用 Format: "markdown" 获取整洁且适合大模型处理的内容
  • 通过 apiResponse.Result.Content 读取页面正文;使用 apiResponse.Selector() 进行解析

评论

支持 Markdown