关于 scrapfly-sdk-go
scrapfly-sdk-go 是供 Go 应用通过 Scrapfly 抓取网页的模块,提供代理池、JavaScript 渲染、截图和 AI 提取,并内置 goquery 选择器用于解析响应。
主要功能
- 01从 Go 应用抓取网页
- 02代理池与反爬绕过
- 03JavaScript 渲染与截图
- 04AI 辅助结构化提取
- 05内置 goquery 响应选择器
适用场景
- 01抓取 HTML、JSON、文本或 Markdown
- 02渲染含大量 JavaScript 的网页
- 03截取网页图像
- 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: trueProxyPool: "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