关于 apify-sdk-integration
这项开发技能介绍如何用 JavaScript、TypeScript 或 Python 的 apify-client,或其他语言的 REST API,在应用中运行 Apify Actor。内容涵盖运行控制、结果获取和集成实践。
主要功能
- 01使用 apify-client 运行 Actor
- 02支持同步或异步执行
- 03获取数据集和键值存储内容
- 04通过其他语言调用 REST API
- 05处理运行状态与错误
适用场景
- 01为应用添加网页抓取
- 02将 Actor 输出接入数据管道
- 03将 Apify 集成为应用后端
MCP 相关
建议使用 search-actors、fetch-actor-details 等 Apify MCP 工具查找 Actor,并查看输入架构、输出和定价。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ apify/ agent-skills --skill apify-sdk-integration安装后在 Claude Code 中输入/apify-sdk-integration确认已加载。
详细介绍
Apify SDK 集成
将 Apify Actor 执行功能添加到现有应用中。本技能介绍适用于 JS/TS 和 Python 的 apify-client 包,以及适用于其他语言的 REST API。
何时使用本技能
- 为现有应用添加网页抓取或自动化功能
- 从应用代码中以编程方式调用 Apify Actor
- 构建使用 Apify 作为后端服务的产品
- 将 Actor 结果集成到数据管道中
重要:包名称
apify-client是用于从应用中调用 Actor 的 API 客户端。apify是用于构建 Actor 的 SDK(本使用场景不应使用此包)。始终安装
apify-client。集成时切勿安装apify。
前提条件
用户需要一个 APIFY_TOKEN。请引导他们前往 https://console.apify.com/settings/integrations 中的 Console > Settings > Integrations 创建令牌。如果他们还没有账号,请访问 https://console.apify.com/sign-up(免费,无需信用卡)。
安全存储令牌——使用环境变量或密钥管理器,切勿将令牌硬编码。
查找合适的 Actor
编写集成代码之前,先找到符合用户需求的 Actor。若 MCP 工具可用,请使用:
search-actors— 按关键字搜索 Apify Storefetch-actor-details— 获取 Actor 的输入架构、输出格式和定价
也可以浏览 https://apify.com/store。在任意 Actor 的 Store URL 后添加 .md,即可获取 Markdown 格式的文档。
JavaScript / TypeScript
安装
npm install apify-client
同步执行(等待结果)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('apify/web-scraper').call({
startUrls: [{ url: 'https://example.com' }],
maxPagesPerCrawl: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
.call() 会一直阻塞,直到 Actor 执行完毕。适用于运行时间较短的 Actor(几分钟以内)。
异步执行(启动后再轮询/检索)
const run = await client.actor('apify/web-scraper').start({
startUrls: [{ url: 'https://example.com' }],
});
// Poll for completion
const finishedRun = await client.run(run.id).waitForFinish();
// Retrieve results
const { items } = await client.dataset(finishedRun.defaultDatasetId).listItems();
对于长时间运行的 Actor,或需要立即获取运行 ID 的情况,请使用 .start() + .waitForFinish()。
检索结果
// Dataset items (structured data from pushData)
const { items } = await client.dataset(run.defaultDatasetId).listItems({
limit: 100,
offset: 0,
});
// Key-value store (files, screenshots, etc.)
const record = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('OUTPUT');
错误处理
try {
const run = await client.actor('apify/web-scraper').call(input);
if (run.status !== 'SUCCEEDED') {
const log = await client.log(run.id).get();
throw new Error(`Actor failed with status ${run.status}: ${log}`);
}
const { items } = await client.dataset(run.defaultDatasetId).listItems();
} catch (error) {
if (error.message?.includes('not found')) {
// Actor ID is wrong or Actor was deleted
} else if (error.statusCode === 401) {
// Invalid or missing APIFY_TOKEN
}
throw error;
}
Python
安装
pip install apify-client
同步执行
from apify_client import ApifyClient
import os
client = ApifyClient(token=os.environ['APIFY_TOKEN'])
run = client.actor('apify/web-scraper').call(run_input={
'startUrls': [{'url': 'https://example.com'}],
'maxPagesPerCrawl': 10,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
异步执行
run = client.actor('apify/web-scraper').start(run_input={
'startUrls': [{'url': 'https://example.com'}],
})
# Poll for completion
finished_run = client.run(run['id']).wait_for_finish()
items = client.dataset(finished_run['defaultDatasetId']).list_items().items
异步客户端(asyncio)
from apify_client import ApifyClientAsync
client = ApifyClientAsync(token=os.environ['APIFY_TOKEN'])
run = await client.actor('apify/web-scraper').call(run_input={
'startUrls': [{'url': 'https://example.com'}],
})
items = (await client.dataset(run['defaultDatasetId']).list_items()).items
REST API(任何语言)
对于没有官方客户端的语言,请直接使用 REST API。
启动一次运行
POST https://api.apify.com/v2/actors/{actorId}/runs
Authorization: Bearer <APIFY_TOKEN>
Content-Type: application/json
{ "startUrls": [{ "url": "https://example.com" }] }
获取运行状态
GET https://api.apify.com/v2/actor-runs/{runId}
Authorization: Bearer <APIFY_TOKEN>
获取数据集条目
GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json
Authorization: Bearer <APIFY_TOKEN>
完整 API 参考:https://docs.apify.com/api/v2
最佳实践
- 设置超时: 在 Actor 输入中传入
timeoutSecs,或在.call()中使用waitSecs,以避免无限期等待。 - 对大型数据集分页: 检索数据集条目时使用
limit和offset。默认限制为 250K 个条目。 - 复用客户端: 创建一个
ApifyClient实例,并在多次调用中复用。 - 处理 Actor 特定的输入: 每个 Actor 都有自己的输入架构。构造输入前,请使用
fetch-actor-detailsMCP 工具,或在 Actor 的 Store URL 后添加.md,获取其架构。
文档
- Apify 的 JS API 客户端:https://docs.apify.com/api/client/js
- Apify 的 Python API 客户端:https://docs.apify.com/api/client/python
- REST API 参考:https://docs.apify.com/api/v2
- Apify 文档(适合大模型):https://docs.apify.com/llms.txt
- Apify 文档(完整):https://docs.apify.com/llms-full.txt
如果 Apify MCP 服务可用,请在开发过程中使用 search-apify-docs 和 fetch-apify-docs 工具查找上下文相关的文档。