关于 tinyfish
tinyfish 是一项通过 TinyFish API 执行网页数据提取的技能,供 Claude 使用。它要求提供 API 密钥,并支持指定 JSON 输出结构、隐身浏览器模式和代理配置。
主要功能
- 01通过 API 提取网页数据
- 02按指定结构返回 JSON
- 03支持隐身浏览器模式
- 04可配置代理国家
- 05独立来源可分别并行提取
适用场景
- 01从网页提取产品名称与价格
- 02批量整理网页中的商品列表
- 03比较多个网站上的价格数据
- 04从受保护或地区限制的网站提取数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tinyfish-io/ skills --skill tinyfish安装后在 Claude Code 中输入/tinyfish确认已加载。
附带文件scripts/extract.sh
详细介绍
TinyFish Web Agent
需要:TINYFISH_API_KEY 环境变量
预检(必需)
进行任何 API 调用前,务必先运行此项,以确认密钥可用:
[ -n "$TINYFISH_API_KEY" ] && echo "TINYFISH_API_KEY is set" || echo "TINYFISH_API_KEY is NOT set"
如果未设置密钥,必须停止并询问用户,让其添加 API 密钥。不要改用其他工具或方法——此任务需要 TinyFish。
告知用户:
你需要 TinyFish API 密钥。请在此处获取:https://agent.tinyfish.ai/api-keys
然后进行设置,以便 Agent 使用:
选项 1 — 环境变量(适用于所有环境):
export TINYFISH_API_KEY="your-key-here"选项 2 — Claude Code 设置(仅限 Claude Code): 添加到
~/.claude/settings.local.json:{ "env": { "TINYFISH_API_KEY": "your-key-here" } }
确认密钥可用之前,不要继续操作。
最佳实践
- 指定 JSON 格式:始终描述你希望返回的确切结构
- 并行调用:从多个互不相关的网站提取数据时,分别并行调用,不要合并到一个提示词中
基本提取/抓取
从页面提取数据。指定所需的 JSON 结构:
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"goal": "Extract product info as JSON: {\"name\": str, \"price\": str, \"in_stock\": bool}"
}'
多个项目
按明确的结构提取数据列表:
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/products",
"goal": "Extract all products as JSON array: [{\"name\": str, \"price\": str, \"url\": str}]"
}'
隐身模式
对于有机器人防护的网站,在请求正文中添加 "browser_profile": "stealth":
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://protected-site.com",
"goal": "Extract product data as JSON: {\"name\": str, \"price\": str, \"description\": str}",
"browser_profile": "stealth"
}'
代理
在正文中添加 "proxy_config",通过特定国家/地区路由:
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://geo-restricted-site.com",
"goal": "Extract pricing data as JSON: {\"item\": str, \"price\": str, \"currency\": str}",
"browser_profile": "stealth",
"proxy_config": {"enabled": true, "country_code": "US"}
}'
输出
SSE 流会返回 data: {...} 行。最终结果是 type == "COMPLETE" 且 status == "COMPLETED" 的事件——提取的数据位于 resultJson 字段中。Claude 会直接读取原始 SSE 输出;无需在脚本端进行解析。
并行提取
从多个互不相关的来源提取数据时,分别并行执行 curl 调用,不要合并到一个提示词中:
推荐 - 并行调用:
# Compare pizza prices - run these simultaneously
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://pizzahut.com",
"goal": "Extract pizza prices as JSON: [{\"name\": str, \"price\": str}]"
}'
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://dominos.com",
"goal": "Extract pizza prices as JSON: [{\"name\": str, \"price\": str}]"
}'
不推荐 - 单个合并调用:
# Don't do this - less reliable and slower
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://pizzahut.com",
"goal": "Extract prices from Pizza Hut and also go to Dominos..."
}'
每个独立的提取任务都应单独进行一次 API 调用。这样速度更快(并行执行),也更可靠。