使用 Scrapfly SDK(`github.com/scrapfly/go-scrapfly`)在 Go 中进行网页抓取。当用户要求抓取某个 URL、绕过反爬虫保护、渲染 JavaScript 等场景时使用。
Scrappfly Go SDK. 使用go-scrapply模块从Go中刮网页,并使用代理旋转,反机器人绕行(ASP),JavaScript渲染,截图和AI提是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
使用 go-scrapfly 模块,可在 Go 中实现网页抓取,支持代理轮换、反爬绕过(ASP)、JavaScript 渲染、截图及 AI 数据提取。该模块内置基于 goquery 的选择器,用于解析响应内容。
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)
}
ScrapeConfig 字段采用符合 Go 语言习惯的 PascalCase 命名风格。ProxyPool 接收一个类型化的常量。
apiResponse, err := client.Scrape(&scrapfly.ScrapeConfig{
URL: "https://web-scraping.dev/product/1",
ASP: true, // 启用反爬绕过
Country: "us", // 代理所在国家(ISO 3166-1 alpha-2 编码)
ProxyPool: scrapfly.PublicResidentialPool, // 或 scrapfly.PublicDataCenterPool
RenderJS: true, // 启用无头浏览器渲染
WaitForSelector: "div.product", // 需配合 RenderJS 使用
RenderingWait: 5000, // 等待毫秒数,需配合 RenderJS 使用
Format: "markdown", // 可选值:raw | clean_html | json | markdown | text
})
selector, err := apiResponse.Selector() // 返回 goquery 文档对象
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",
})
RenderJS: true 是启用 RenderingWait、WaitForSelector 和截图功能的前提条件ASP: true 的同时,搭配使用 scrapfly.PublicResidentialPoolFormat: "markdown"apiResponse.Result.Content 读取页面原始内容;通过 apiResponse.Selector() 进行 HTML 解析相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章