Skip to main content
最新的安装说明、示例和源代码请查看 Python SDK GitHub 仓库。
使用官方 Decodo Python SDK,为搜索引擎、电商平台、社交媒体、AI 工具等构建类型化的抓取工作流。
  • 完整类型化的目标和参数,支持 IDE 自动补全
  • 同步、异步和批量抓取方法
  • 通过 Web Data API 提供网页搜索、站点地图和爬取功能
  • 基于 httpx 构建;需要 Python 3.12 或更高版本
  • 类型化的错误层级,让集成更安全

什么是 Decodo Python SDK?

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

为什么使用该 SDK?

  • 类型化与自动补全:目标参数完整类型化,带来更好的编辑器支持和更少的错误。
  • 统一的抓取接口:通过同一个 SDK 使用搜索引擎、电商平台、社交媒体和 AI 工具。
  • 异步与批量工作流:创建抓取任务、轮询任务状态,并大规模处理批量请求。
  • 类型化错误:安全地处理身份验证、参数校验、超时和速率限制等失败情况。
  • 配置极简:仅依赖 httpx,无需额外的 HTTP 客户端。

要求

  • Python 3.12 及以上版本

安装

快速开始

创建一个新项目:
在 Decodo 控制面板中,从您的 Web Data API 订阅复制 Web Data API 密钥。请将其存储在环境变量中,避免写入源代码:
较旧的计划只有基本身份验证令牌。请将其作为 token 传入,而不是 api_key——详见下文的”配置”一节。
每个目标都有对应的参数类。导入您需要的那个,填入字段,然后传给 scrape():
运行脚本:
参数类随软件包一起提供,因此执行 pip install decodo-sdk 之后无需额外步骤。 每个类都固定了自己的目标,并且只接受该目标支持的字段——您的 IDE 会标出拼写错误或不受支持的字段,运行时校验也会在请求发出之前捕获它们。

另一种方式:字典载荷

抓取方法也接受普通的 Python 字典,并会在请求发出之前根据随包提供的 schema 进行校验。编写代码时不会有任何检查,因此拼写错误只会在运行时暴露:
请使用 Target 枚举而不是原始字符串,以避免写错目标名称。除快速试验之外的场景,均推荐使用类型化参数类。

将类型更新到更新的 schema

软件包内置的类型反映的是发布时的 schema。若要在不等待新版本的情况下更新它们,请运行类型生成器:
然后改为从该目录导入:
传给 --out-dir 的目录名会成为导入命名空间,因此 ./decodo_generated 对应 from decodo_generated.targets import ...。任何名称都可以,但请在整个项目中保持一致。

配置

请传入 api_key 或 token 之一,切勿同时传入:
同时设置两者会抛出 ValueError: web_scraping_api accepts either token or api_key, not both. Provide only one.;两者都不设置会抛出 ValueError: web_scraping_api requires api_key or token in DecodoConfig.您传入的凭据还决定了 SDK 调用哪个 API。api_key 使用位于 data.decodo.com 的 Web Data API,这也是使用搜索、站点地图和爬取功能的唯一途径。token 使用位于 scraper-api.decodo.com 的旧版 Web Scraping API,该 API 仅支持抓取。

抓取

通过 client.web_scraping_api 访问该 API。

同步抓取

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

异步抓取

创建抓取任务并立即返回。之后您需要轮询其状态和结果:
get_status 会返回 pending、done 或 faulted。

批量抓取

使用某个目标参数类的批量变体,在单个请求中发送多个输入。主输入参数接受列表:

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

这些方法由位于 data.decodo.com 的 Web Data API 提供,需要 api_key。在配置了基本身份验证 token 的客户端上调用它们会抛出 ValueError。它们与抓取方法同属 client.web_scraping_api 命名空间。 参数为普通字典。SearchRequest、MapRequest 和 CrawlRequest 是 TypedDict,可用于编辑器补全——它们始终可以导入,无需代码生成。请求体同样会在发出之前根据随包提供的 schema 进行校验,与 scrape 一致。

搜索

运行一次网页搜索并返回解析后的结果文档:
已经执行但未能成功抓取的搜索,仍会以 HTTP 200 返回,并带有 status: "failed" 和一条 message。请先检查 result["status"],再读取其他字段。

站点地图

从站点的页面及其站点地图中发现链接:

爬取

crawl() 会启动爬取、等待其完成,并返回每个页面及其内容:
因 max_duration 或服务端限制而提前停止的爬取,最终状态为 truncated,此时 crawl() 会返回已收集到的页面。每个页面都带有自己的 status(pending、done 或 faulted);当抓取失败时,返回的是 content_error 而不是 content。 更底层的方法可让您自行控制爬取流程——例如在一个进程中启动,在另一个进程中收集:
get_crawl_status 会返回 pending、done、faulted、cancelled 或 truncated;当爬取提前停止时,还会带上 reason。

目标与参数类

Target 枚举中的每个目标都有一个与之对应的参数类。类名是枚举成员名后加 Params——例如 Target.GoogleSearch → GoogleSearchParams,Target.Chatgpt → ChatgptParams。批量调用则在 Params 之前插入 Batch,例如 GoogleSearchBatchParams。 您无需显式传入目标,因为每个参数类都已固定了自己的目标。例如,单独写 GoogleSearchParams(query="coffee shops") 就足够了。Target 枚举在使用字典载荷,以及从响应中读取 target 字段时仍然有用。
有一个目标不符合该命名规则:Target.Target 对应的是 TargetStoreParams(而不是 TargetParams),以避免名称冲突。其余目标均遵循该模式。
每个目标接受一个主输入参数(url、query、product_id 或 prompt),以及可选的配置项。

搜索引擎

电商

社交媒体

AI 工具

其他

通用抓取

完整的目标列表和参数详情,请参阅目标列表和参数。

错误处理

该 SDK 会抛出与 API 错误码对应的类型化错误:
TimeoutError 不在 DecodoError 的层级之内,因此 except DecodoError 捕获不到它,请单独处理。此外,从 decodo 导入它会在该模块中遮蔽内置的 TimeoutError。类型化参数也可能在请求发出之前就失败。创建参数对象时,若字段未知或类型不正确,会抛出 pydantic.ValidationError。

相关内容

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

支持

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

反馈

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