最新的安装说明、示例和源代码请查看 Python SDK GitHub 仓库。
- 完整类型化的目标和参数,支持 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 及以上版本
安装
快速开始
创建一个新项目:较旧的计划只有基本身份验证令牌。请将其作为
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 联系我们。
您也可以随时通过电子邮件 support@decodo.com 联系我们。
反馈
找不到您要找的内容?请求一篇文章!
有反馈意见?分享您对我们如何改进的想法。
有反馈意见?分享您对我们如何改进的想法。