Skip to main content
最新的安装说明、示例和源代码请查看 Go SDK GitHub 仓库。
使用官方 Decodo Go SDK,为搜索引擎、电商平台、社交媒体、AI 工具等构建类型化的抓取工作流。
  • 类型化、面向特定目标的请求参数,支持编辑器自动补全
  • 同步、异步和批量抓取方法
  • 通过 Web Data API 提供网页搜索、站点地图和爬取功能
  • 依据当前 Decodo 目标 schema 进行运行时校验
  • 类型化的错误集合,让集成更安全
  • 标准库之外仅有一个依赖;需要 Go 1.21 或更高版本

什么是 Decodo Go SDK?

Decodo Go SDK 为 Google、Amazon、TikTok、YouTube、ChatGPT、Perplexity 等 Decodo 目标提供类型化接口。您无需手动拼装 HTTP 请求和校验载荷,而是直接在编辑器中使用类型化构造函数和特定目标的参数结构体。

为什么使用该 SDK?

  • 类型化与自动补全:每个目标都有自己的参数结构体,编辑器因此知道它接受哪些字段。
  • 统一的抓取接口:通过同一个 SDK 使用搜索引擎、电商平台、社交媒体和 AI 工具。
  • 异步与批量工作流:创建抓取任务、轮询任务状态,并大规模处理批量请求。
  • 类型化错误:显式处理身份验证、参数校验、超时和速率限制等失败情况。
  • 由 schema 生成:目标常量和参数结构体均由 Decodo schema 生成,该 schema 同时用于运行时校验。
  • 配置极简:仅需一个用于 schema 校验的依赖,其余均使用标准库。

要求

  • Go 1.21 或更高版本。运行 go version 可检查版本,或安装 Go。

安装

快速开始

创建一个新项目:
在 Decodo 控制面板中,从您的 Web Data API 订阅复制 Web Data API 密钥。请通过环境变量导出,避免写入源代码:
较旧的计划只有基本身份验证令牌。请设置 Token 而不是 APIKey——详见下文的”配置”一节。
每个目标都有一个返回其参数结构体的构造函数。创建您需要的那个,设置字段,然后传给 Scrape:
运行程序:
每个构造函数都固定了自己的目标,并返回只包含该目标所支持字段的结构体,因此您永远不需要传入目标名称或拼装通用参数映射。 您的编辑器会标出拼写错误或不受支持的字段,SDK 也会在发送请求之前,依据目标 schema 校验具体取值。

设置可选参数

可选参数是指针字段,因此”未设置”可以与”零值”区分开。请使用 decodo.Ptr 在行内设置它们:

配置

请设置 APIKey 或 Token 之一,切勿同时设置:
同时设置两者会返回 *decodo.ConfigurationError:WebScrapingAPI accepts either Token or APIKey, not both. 凭据还决定了 SDK 调用哪个 API:APIKey 使用位于 data.decodo.com 的 Web Data API,这也是使用搜索、站点地图和爬取功能的唯一途径;Token 使用位于 scraper-api.decodo.com 的旧版 Web Scraping API,该 API 仅支持抓取。

抓取

通过 client.WebScrapingAPI 访问该 API。

同步抓取

等待抓取结果返回后再继续:

异步抓取

创建抓取任务并立即返回。之后您需要轮询其状态和结果:
GetStatus 会返回 decodo.TaskStatusPending、decodo.TaskStatusDone 或 decodo.TaskStatusFaulted 之一。在结果可用之前,GetResults 会返回 nil。

批量抓取

每个受支持的目标也都有批量构造函数,例如 NewGoogleSearchBatchParams()。在批量请求中,URL 或 Query 等字段接受切片,其中每个值都会成为一个独立任务:
一个批量请求只针对单个目标,该目标由构造函数为您固定。URL 和 Query 是仅有的两个接受多个值的字段;其余字段均使用各自的常规类型。ScrapeBatch 不支持 walmart_product、target_product、tiktok_shop_product、chatgpt、gemini 和 perplexity。这些目标请改用 ScrapeAsync。批量请求限制为每秒一次,并且会跳过 schema 校验,因为该 schema 描述的是单个值。

Web Data API:搜索、站点地图和爬取

这些方法由位于 data.decodo.com 的 Web Data API 提供,需要 APIKey。在配置了基本身份验证 Token 的客户端上调用它们,会在发出任何请求之前返回 *decodo.ConfigurationError,例如:Search requires an API key. Configure WebScrapingAPIConfig.APIKey instead of Token. 请使用 errors.As 进行匹配。

搜索

站点地图

爬取

Crawl 会启动爬取、持续轮询直到结束,并返回所有页面:
若要自行控制爬取流程,请先启动爬取,再分别轮询:
GetCrawlResults 会在内部自行处理 API 的分页并返回所有页面,因此不存在单独的列出页面的调用。TypeScript SDK 的 listCrawlPages 在 Go 中没有对应方法。Crawl 会包装其失败信息,因此请使用 errors.As 而不是类型分支来匹配——详见下文的”错误处理”一节。

目标与参数构造函数

每个目标都有与之对应的构造函数。目标名称会转换为 PascalCase,加上 New 前缀和 Params 后缀——例如 google_search → NewGoogleSearchParams()。批量构造函数遵循同样的规则,例如 NewGoogleSearchBatchParams()。 您无需显式传入目标,因为每个构造函数都已固定了自己的目标。每个参数结构体也带有一个 Target 字段,GetTarget() 会以字符串形式返回它。 每个目标接受一个主输入字段(URL、Query、ProductID 或 Prompt),以及 Parse、Markdown、Geo 或 CallbackURL 等可选配置。可用的可选字段因目标而异,请借助编辑器自动补全或参数文档。

搜索引擎

电商

社交媒体

AI 工具

其他

通用目标与原始 URL 抓取

Go SDK 提供 40 个目标。各 Decodo SDK 的覆盖范围并不相同,因此 TypeScript SDK 中可用的目标在这里未必可用——ecommerce、universal_ecommerce、google_maps、google_suggest、google_shopping_search、youtube_video 和 youtube_transcript 在 Go 中没有对应的构造函数。任意 URL 请使用 universal。
完整的目标列表和参数详情,请参阅目标列表和参数。

Schema 校验

Go 会在编译期检查字段是否存在以及类型是否正确。具体取值则在运行时另行依据 Decodo 目标 schema 进行校验。 未配置 Schema 时,客户端会使用 decodo.SharedDefaultSchema:它在首次使用时加载最新 schema,并在 ~/.decodo/decodo.ir.json 缓存 24 小时。该加载每个进程只执行一次,因此获取失败不会重试:SDK 会记录一条警告,并在该会话中禁用校验后继续运行。

错误处理

该 SDK 会返回与 API 错误码对应的类型化错误:
AuthenticationError、RateLimitError 和 ValidationError 都内嵌了 DecodoError 并实现了 Unwrap。因此,errors.Is 和 errors.As 对 *decodo.DecodoError 同样有效。
类型分支只能匹配错误自身的类型。Crawl 会包装其失败信息,因此类型分支会把它们全部送入 default。对于任何可能来自爬取的错误,请使用 errors.As:
TimeoutError 和 CancellationError 不在 DecodoError 的层级之内,且只携带 Msg,因此针对 *decodo.DecodoError 的判断无法匹配它们。此外,当目标 schema 无法获取时,schema 校验也可能被跳过。在这种情况下,非法取值可能会到达 API,并以 API 错误的形式返回,而不是在编译期或本地校验阶段被发现。

相关内容

  • CLI:在命令行中运行 Decodo 抓取工作流。
  • TypeScript SDK:将 Decodo API 集成到 TypeScript 和 JavaScript 项目中。
  • Python SDK:将 Decodo API 集成到 Python 项目中。
  • MCP 服务器:将 AI 智能体和兼容 MCP 的工具连接到 Decodo。
  • GitHub 仓库:查看 Go SDK 的源代码、示例和最新版本。

支持

需要帮助或只是想打个招呼?我们的支持团队全天候为您服务。
您也可以随时通过电子邮件 support@decodo.com 联系我们。

反馈

找不到您要找的内容?请求一篇文章!
有反馈意见?分享您对我们如何改进的想法。