发送任意产品链接——无论是亚马逊、eBay、沃尔玛、AliExpress 还是其他 20 多个平台——都能获得格式整洁、结构清晰的 JSON 响应。无需维护选择器,无需应对机器人,也无需担心数据管道不稳定。
curl -X POST localhost:8000/api/v1/scrape/page \
-d '{"url":"amazon.com/dp/B0CFFXRFTH"}'
电商平台每隔几周就会发布界面布局更新,部署多层反机器人机制,将“买箱”和卖家数据封装在会话中,并且在每个地区返回不同的字段结构。大多数团队将80%的时间用于维持爬虫的正常运行,只有20%的时间用于处理数据本身。我们提供的正是他们最终不得不从头重建的这四项功能。
如果你曾因市场重构后,仪表盘上满是 nulls,那么这篇文章就是为你准备的。
无需编写选择器。选择一个预设,传入参数,解析响应。这一流程适用于所有受支持的市场平台。
克隆仓库,然后 docker compose up。此时将启动两个服务:位于 :8000,crawler 运行在 :8001.
# one-time setup
git clone \
github.com/CyberYozh-data/yozh-scraper
cd yozh-scraper
docker compose up -d
发布预设名称及参数。无需选择器,也无需反机器人调整——预设包会自动处理选择器、地区和货币的解析。
curl \
localhost:8000/api/v1/scrape/preset/page \
-X POST \
-d '{"source": "amazon_product",
"preset_params": {"asin": "B0CFFXRFTH"},
"locale": "us"}'
各区域形状一致。如果布局变更后某个选择器出现故障,LLM 自愈机制会即时将其重新生成——管道继续运行。
{
"asin": "B0CFFXRFTH",
"price": 189.99,
"currency": "USD",
"in_stock": true,
"rating": 4.7
}
选择一个预设,查看响应效果。字段集因来源而异,但请求结构完全相同。
三个现成的电子商务配置方案,可直接复制粘贴。未捆绑任何调度程序——请使用您自己的 cron / Airflow / Temporal。
每天对竞争对手的 ASIN 列表进行批量处理,与昨日数据进行对比,并将变更内容发布到 Slack。剩下的工作由 Cron 自动完成。
# crontab: every day at 06:00 0 6 * * * /usr/local/bin/price-watch.sh # price-watch.sh curl -X POST localhost:8000/api/v1/scrape/preset/pages \ -d "@asins.json" \ | jq '.results[] | {asin, price, in_stock}' \ > today.json diff yesterday.json today.json | slack-cli post #pricing mv today.json yesterday.json
每天抓取一个分类页面,与前一天的数据进行商品URL去重。在竞争对手将新品收录到索引之前,通过Webhook及时获取新品信息。
# start a crawl of the category curl -X POST localhost:8001/api/v1/crawl/start \ -d '{"seed_url":"amazon.com/s?k=ssd", "max_pages":300, "scope":"same-domain"}' \ | jq -r '.urls[]' > today_urls.txt # urls that appeared today comm -13 yesterday_urls.txt today_urls.txt \ | curl -X POST $WEBHOOK_URL -d @-
抓取需要登录的页面(LinkedIn、合作伙伴门户、内部管理员页面)。通过 Sessions API 登录一次,然后在 session_id 进行每次抓取。
# 1. log in once via declarative script SID=$(curl -X POST \ localhost:8000/api/v1/sessions/$ID/login \ -d "@login_script.json" \ | jq -r .session_id) # 2. reuse for every scrape · cookies persist 24h curl -X POST localhost:8000/api/v1/scrape/preset/page \ -d "{\"source\":\"linkedin_profile\", \"preset_params\":{\"slug\":\"satyanadella\"}, \"session_id\":\"$SID\"}"
src/presets/builtin/ 涵盖了最大的数据源:amazon_product(美国、英国、德国、法国、日本)、amazon_search(美国、英国、德国)、 ebay_search(美国、英国、德国)、walmart_product(美国)、google_search(美国、英国、德国、法国、俄罗斯、日本)、google_shopping(美国、英国、德国)、bing_search(美国、英国、德国、法国、俄罗斯、日本)、yandex_search(美国、英国、德国、法国、俄罗斯、日本)、youtube_video(全球)、linkedin_profile(全球,需要 session_id)。还需要其他数据源吗?只需 POST /api/v1/presets/generate 并提供一个示例 URL——大型语言模型(LLM)会推断出数据结构并为您生成选择器。amazon_product 在 .us、.uk、.de、.fr、.jp 中,所有字段都返回相同的键(货币已本地化,结构保持不变)。可选字段明确支持为空,因此缺失的值绝不会导致解析器出错。当市场平台更改布局时,LLM 会通过自愈机制即时重新生成选择器(在请求中传入 llm: {model: "..."} 请求中)——管道会通过在响应中添加 self_heal: true 响应中的标志继续运行。破坏性变更仅在次要版本中发布,并附有迁移说明在 CHANGELOG.md.title, price, currency, in_stock, rating, seller,外加各电商平台特有的字段(如有,如 ASIN、买断框获胜者、赞助标识)。对于登录后与账户相关的数据(Prime 定价、合作伙伴门户),请使用 Sessions API 并在请求中传递 session_id 随请求一并传递。git clone + docker compose up -d 约30秒即可让爬虫上线(Docker仅需拉取一次镜像)。首次 curl POST /api/v1/scrape/preset/page 对于已缓存的语言环境,1–3秒内返回结构化JSON数据;冷启动时最多需5–8秒。无需注册、无需创建API密钥、无SaaS计量——只要 localhost:8000 即可访问端点。CYBERYOZH_API_KEY — 5种代理类型,覆盖250个国家代码(住宅轮换/固定代理、移动4G/5G、数据中心、ISP)。反机器人机制由一款具备温指纹、匹配住宅代理及类人操作时序的隐形Chromium版本处理——大多数数据流可完全规避验证码。 当出现验证码时,爬虫会将其作为结构化错误返回,而非在后台默默解决。经验法则是:目录级别的爬取使用住宅轮换代理,针对反机器人措施严格的区域或与账户绑定的任务则使用移动代理。Yozh Scraper 开箱即用,支持亚马逊、eBay、沃尔玛和谷歌购物。免费。永久免费。如果对您有帮助,请给我们点个星——每一颗星都至关重要。
Yozh Crawler + Scraper 根据 MIT 许可证发布。请随意使用、分叉和基于它进行开发。
使用 Yozh 进行开发的用户怎么说
仅用一个下午就将我们内部的 Playwright 集群替换为 Yozh。MCP 端点直接接入我们的 Claude 代理——无需任何胶水代码,爬虫和数据提取工具便能正常运行。
预设系统是其杀手级功能。我们传入源名称,就能得到干净的 JSON 数据;其自动修复功能甚至在我们察觉之前就发现了亚马逊的两次布局变更。
终于出现了一个将代理和会话视为第一类对象的开源爬虫工具。我们将其部署在合作伙伴门户网站的登录墙后方——会话能够保持持久性,且跨区域的爬取结果始终保持一致。
通过 MCP 将其连接到 Cursor 后,我的代理现在可以在任务进行中实时提取网页数据。通过 SSE 进行的流式爬取,正是代理工作流所缺失的功能。
为了节省成本,我们放弃了付费的数据抓取 API,并做好了性能下降的准备——结果却事与愿违。现在采用自托管模式,无需按请求付费,而且输出数据结构比我们以前付费使用的还要简洁。