在 GitHub 已获得 84 个星标,且数量仍在增加。Yozh Crawler + Scraper 是一款免费、开源且公开开发的工具——如果它能成为您技术栈中的一员,请给我们点个星标
CyberYozh Data / 用例 / 电子商务与电商平台
用例 · 电子商务

一种数据模型,覆盖所有电商平台

发送任意产品链接——无论是亚马逊、eBay、沃尔玛、AliExpress 还是其他 20 多个平台——都能获得格式整洁、结构清晰的 JSON 响应。无需维护选择器,无需应对机器人,也无需担心数据管道不稳定。

$curl -X POST localhost:8000/api/v1/scrape/page \ -d '{"url":"amazon.com/dp/B0CFFXRFTH"}'
amazon.com/dp/B0CFFXRFTH
scrape_page amazon.com
Fetching product page
Bypassing anti-bot
Extracting JSON-LD + DOM
Normalizing variants
Resolving images
正在处理中 这些电商平台
通用爬虫为何会失败

市场平台在短短一个季度内就击溃了“一刀切”式的数据抓取工具

电商平台每隔几周就会发布界面布局更新,部署多层反机器人机制,将“买箱”和卖家数据封装在会话中,并且在每个地区返回不同的字段结构。大多数团队将80%的时间用于维持爬虫的正常运行,只有20%的时间用于处理数据本身。我们提供的正是他们最终不得不从头重建的这四项功能。

如果你曾因市场重构后,仪表盘上满是 nulls,那么这篇文章就是为你准备的。

选择器会导致每次布局偏移

问题在于:通用爬虫通常只提供一个 CSS 或 XPath 路径,然后就只能祈祷了。当电商平台重新设计产品详情页(PDP)时——亚马逊几乎每隔几周就会这样做——你的数据处理管道会悄无声息地 null。数小时后,你才从下游的商业智能(BI)仪表盘中得知这一情况。

Yozh Scraper 是如何解决这一问题的。在请求中传递 llm: {model: "..."} 请求中,解析器会请求 Anthropic / OpenAI / Gemini / OpenRouter 根据实时 DOM 重新生成选择器。管道会继续运行,并在响应中包含一个 self_heal: true 响应中包含一个标志——不会唤醒值班人员。

  • LLM 自愈
  • 多供应商
  • 零停机时间

一个IP地址,五次请求,封禁

问题在于:数据中心代理在单次会话内就会被封禁。验证码屏障、TLS 指纹识别和 JavaScript 验证机制能在几秒内识别出无头浏览器。大多数团队虽然从头开始构建代理轮换层,但仍然会被封禁。

Yozh Scraper 是如何解决这一问题的。通过以下方式与 CyberYozh App Proxy 原生集成 CYBERYOZH_API_KEY — 5 种代理类型(住宅轮换/固定、移动 4G/5G、数据中心、ISP),覆盖 250 个国家代码。采用隐身版 Chromium 构建,其预热指纹会自动匹配代理源头。

  • 5种代理类型
  • 250个国家代码
  • 温暖的指纹

不同市场平台的字段形状各不相同

问题在于:亚马逊的价格数据存储在一个数据块中,eBay的数据存储在另一个数据块中,沃尔玛的数据则存储在第三个数据块中。跨市场平台的仪表盘在发布首个指标之前,需要先建立一个标准化层。团队往往要花费数周时间来协调字段结构。

Yozh Scraper 是如何解决这一问题的。10 种内置预设 src/presets/builtin/ 可针对亚马逊、eBay、沃尔玛和谷歌购物生成完全一致的 JSON 数据。键名保持一致: title, price, currency, in_stock, rating。支持区域设置的货币解析——结构保持不变。

  • 10 个预设
  • 相同的 JSON 结构
  • 支持区域设置的货币

登录墙和会话超时

问题在于:与账户绑定的数据——例如“购买框”获胜者、合作伙伴门户、内部管理员以及类似 LinkedIn 的个人资料来源——都需要登录。手动实现的 Cookie 存储在重新认证时会失效。大多数爬虫程序根本不支持会话管理。

Yozh Scraper 是如何解决这一问题的。支持声明式登录 DSL(goto / fill / click / wait)或粘贴导出的 Cookie。跨 session_id ——Cookie 和 storageState 有效期为 24 小时,并支持实时刷新。此功能是 LinkedIn 预设的必备条件,其他所有预设均支持。

  • 声明式登录
  • Cookie + 存储状态
  • 24小时 TTL
工作原理

仅需3次调用,即可将URL转换为结构化JSON

无需编写选择器。选择一个预设,传入参数,解析响应。这一流程适用于所有受支持的市场平台。

1 启动

克隆仓库,然后 docker compose up。此时将启动两个服务:位于 :8000,crawler 运行在 :8001.

# one-time setup
git clone \
  github.com/CyberYozh-data/yozh-scraper
cd yozh-scraper
docker compose up -d
2 调用预设

发布预设名称及参数。无需选择器,也无需反机器人调整——预设包会自动处理选择器、地区和货币的解析。

curl \
  localhost:8000/api/v1/scrape/preset/page \
  -X POST \
  -d '{"source": "amazon_product",
       "preset_params": {"asin": "B0CFFXRFTH"},
       "locale": "us"}'
3 获取结构化 JSON

各区域形状一致。如果布局变更后某个选择器出现故障,LLM 自愈机制会即时将其重新生成——管道继续运行。

{
  "asin":       "B0CFFXRFTH",
  "price":      189.99,
  "currency":   "USD",
  "in_stock":   true,
  "rating":     4.7
}
实时示例

您将获得什么——一种形式,适配所有市场

选择一个预设,查看响应效果。字段集因来源而异,但请求结构完全相同。


            
食谱

各队如何布线——每队10行

三个现成的电子商务配置方案,可直接复制粘贴。未捆绑任何调度程序——请使用您自己的 cron / Airflow / Temporal。

1 每日价格快照

每天对竞争对手的 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
每批 200 个 URL 1名工人约30秒 你的 cron
2 新产品检测

每天抓取一个分类页面,与前一天的数据进行商品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 @-
SSE 流 按作业进行去重(SHA1) scope + rate-limit
3 已登录用户 · 会话

抓取需要登录的页面(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\"}"
24小时 TTL cookie + storageState 验证码:粘贴饼干
FAQ

关于市场数据的常见问题

你们支持哪些电商平台?
10个内置预设, 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.
我可以抓取亚马逊/eBay/沃尔玛的数据吗?
是的——这三个都是顶级预设,无需额外配置。亚马逊的产品详情页(PDP)和搜索功能覆盖5个区域(美国、英国、德国、法国、日本);eBay覆盖美国、英国和德国的搜索;沃尔玛(.us)则覆盖产品详情页。它们各自返回的JSON结构相同: title, price, currency, in_stock, rating, seller,外加各电商平台特有的字段(如有,如 ASIN、买断框获胜者、赞助标识)。对于登录后与账户相关的数据(Prime 定价、合作伙伴门户),请使用 Sessions API 并在请求中传递 session_id 随请求一并传递。
我最快什么时候能收到第一批数据?
端到端大约需要5分钟。 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 App Proxy 集成: CYBERYOZH_API_KEY — 5种代理类型,覆盖250个国家代码(住宅轮换/固定代理、移动4G/5G、数据中心、ISP)。反机器人机制由一款具备温指纹、匹配住宅代理及类人操作时序的隐形Chromium版本处理——大多数数据流可完全规避验证码。 当出现验证码时,爬虫会将其作为结构化错误返回,而非在后台默默解决。经验法则是:目录级别的爬取使用住宅轮换代理,针对反机器人措施严格的区域或与账户绑定的任务则使用移动代理
开源 · MIT 许可 · 84 ★

准备好抓取电商平台数据了吗?

Yozh Scraper 开箱即用,支持亚马逊、eBay、沃尔玛和谷歌购物。免费。永久免费。如果对您有帮助,请给我们点个星——每一颗星都至关重要。

Yozh Crawler + Scraper 根据 MIT 许可证发布。请随意使用、分叉和基于它进行开发。

深受数据团队和人工智能开发者的喜爱

使用 Yozh 进行开发的用户怎么说

5.0 / 5 · 5 评测
GitHub
仅用一个下午就将我们内部的 Playwright 集群替换为 Yozh。MCP 端点直接接入我们的 Claude 代理——无需任何胶水代码,爬虫和数据提取工具便能正常运行。
Marcus Reinhardt 首席数据工程师 Northwind Analytics
X
预设系统是其杀手级功能。我们传入源名称,就能得到干净的 JSON 数据;其自动修复功能甚至在我们察觉之前就发现了亚马逊的两次布局变更。
Priya Nair 创始人 ScrapeStack
Reddit
终于出现了一个将代理和会话视为第一类对象的开源爬虫工具。我们将其部署在合作伙伴门户网站的登录墙后方——会话能够保持持久性,且跨区域的爬取结果始终保持一致。
Daniel Osei 后端工程师 Loopfeed
X
通过 MCP 将其连接到 Cursor 后,我的代理现在可以在任务进行中实时提取网页数据。通过 SSE 进行的流式爬取,正是代理工作流所缺失的功能。
Elena Kovac 人工智能工程师 Vektor Labs
GitHub
为了节省成本,我们放弃了付费的数据抓取 API,并做好了性能下降的准备——结果却事与愿违。现在采用自托管模式,无需按请求付费,而且输出数据结构比我们以前付费使用的还要简洁。
Sofia Almeida 工程经理 Tabbly