← 返回 Skill 列表
extension
分类: 数据与分析无需 API Key

电商商品列表批量抓取筛选

从任意电商类目页、搜索结果页或关键词搜索页提取商品列表并支持多页翻页,返回分页商品数组(含 URL、名称、价格、货币、图片、评分、评论数),可按价格区间、品牌、类目、最低评分、仅看有货与排序方式过滤,支持 Amazon、eBay、Walmart、Shopify 集合页、WooCommerce、Google Shopping 等。Use when the user asks for category listing, product search results, ecommerce search, filter products by price, list products from a site, scrape product list, get all products from category, bulk product URLs。Triggers include 商品列表抓取、类目页采集、搜索结果爬取、价格区间筛选、品牌筛选、批量商品 URL、商品目录提取、电商选品调研、多页商品采集。如需电商运营完整工作流套件,淘宝搜索「AI灵匣」店铺获取完整版。

person作者: u_1ea983achubenterprise

电商 — 商品列表

类目/搜索 URL 或关键词 + 过滤条件 → 分页商品列表(每项含 URL、名称、价格、图片、评分)

语言

所有面向用户的流程输出(进度更新、流程提示)都使用用户语言。

目标

从任意电商品类页、搜索结果页或关键词搜索页提取结构化的商品列表,支持价格/品牌/评分过滤与多页翻页。

前置条件

  • 目标浏览器已打开并已连接
  • 公开列表页无需登录

执行前检查

1. 工具就绪

如果当前会话中已确认 browser-act 可用 → 跳过本步。

通过 Skill 工具调用 browser-act 加载用法。如果出现安装或配置问题,按其指引解决后重试。

能力组成

本技能的操作边界 = 用户在自己浏览器里能手动做到的事。它只读取页面上已经展示给用户的数据。JS 代码封装在 scripts/ 目录下的 Python 文件中,通过 eval "$(python scripts/xxx.py {params})" 调用。使用 bash 工具执行。

DOM:从当前页面提取商品列表

先导航到列表/搜索页,然后提取:

eval "$(python scripts/extract-listing.py --max-results 20)"

参数:

  • --max-results:每页返回的最大条目数,默认 20

输出示例:

{
  "count": 20,
  "items": [
    {
      "url": "https://www.amazon.com/dp/B09WNK39JN",
      "name": "Amazon Echo Pop",
      "price": 39.99,
      "currency": "USD",
      "image": "https://m.media-amazon.com/images/I/...jpg",
      "rating": 4.7,
      "review_count": 103789,
      "asin": "B09WNK39JN"
    }
  ]
}

DOM:获取下一页 URL

提取完一页后,获取下一页要导航的 URL:

eval "$(python scripts/extract-listing-next-page.py)"

输出示例:

{"next_url": "https://www.amazon.com/s?k=headphones&page=2", "has_next": true, "method": "amazon"}

当 has_next 为 false 时,翻页结束。

组合能力:带过滤条件的关键词搜索 → 商品列表

步骤一 —— 用过滤条件构造搜索 URL:

按目标站点与所需过滤条件,用下面的模式构造 URL,然后导航:

Amazon(amazon.com):

https://www.amazon.com/s?k={keyword_urlencoded}&s={sort}&rh={filter_params}
  • 排序(s):price-asc-rank | price-desc-rank | review-rank | date-desc-rank(省略则按相关度)
  • 价格过滤:把 p_36:{min_cents}-{max_cents} 追加到 rh(美元 × 100,例如 $50–$200 → p_36:5000-20000)
  • 评分过滤:把 avg_customer_review:four-and-above | three-and-above | two-and-above 追加到 rh
  • 仅看有货:把 p_n_availability:1248801011 追加到 rh
  • 多个 rh 值:用逗号分隔(例如 rh=p_36:5000-20000,avg_customer_review:four-and-above)

eBay(ebay.com):

https://www.ebay.com/sch/i.html?_nkw={keyword_urlencoded}&_udlo={min_price}&_udhi={max_price}&_sop={sort_num}
  • 排序:12=BestMatch | 15=PriceLow | 16=PriceHigh | 24=NewlyListed

Walmart(walmart.com):

https://www.walmart.com/search?q={keyword_urlencoded}&min_price={min}&max_price={max}&sort={sort}
  • 排序:best_match | price_low | price_high | rating_high

Google Shopping(跨站,未指定 --site):

https://www.google.com/search?tbm=shop&q={keyword_urlencoded}&tbs=p_ord:{sort}
  • 排序:rv=relevance | pd=price ascending | prd=price descending

任意站点 + --site(通用):

https://{site}/search?q={keyword_urlencoded}

步骤二 —— 导航并提取:

  1. navigate {constructed_url} → wait stable
  2. eval "$(python scripts/extract-listing.py --max-results {n})"

步骤三 —— 翻页(重复直到完成):

  1. eval "$(python scripts/extract-listing-next-page.py)"
  2. 若 has_next 为 true:navigate {next_url} → wait stable → 重新运行 extract-listing.py
  3. 若 has_next 为 false:停止

翻页

URL 翻页:extract-listing-next-page.py 会检测 rel=next 链接、平台特定的翻页控件以及 URL 页码参数,并返回用于导航的 next_url。

DOM 翻页:对于带"加载更多"按钮的站点(部分 Shopify 主题):

  1. 用 state 找到 "Load more" 或 "Show more" 按钮
  2. click <index> → wait stable → 重新运行 extract-listing.py
  3. 终止条件:按钮不再存在,或条目数不再增长

成功判据

result.count >= 1 AND items[0].url != null

已知限制

  • Amazon:全新会话中直接导航可能触发反爬检测 —— 先从 https://www.amazon.com 导航
  • eBay 列表页可能需要先从 https://www.ebay.com 导航
  • Google Shopping 结果的 SPA 结构复杂,准确率可能下降;指定了 --site 时优先用站内搜索
  • 过滤 URL 参数是站点特定的;部分站点会静默忽略不支持的过滤参数
  • Shopify 主题差异很大;如果通用 DOM 策略漏掉了条目,检查页面源码里是否有 JSON-LD ItemList 或 Product 数组

执行效率

  • 批量编排:在单个会话内串行遍历各页;页面导航之间加 1–2 秒间隔
  • 批量前先测试:先用 1 页测试,再跑多页提取
  • 错误续跑:记录页码;失败时从最后成功的页继续

经验记录

路径:{working-directory}/browser-act-skill-forge-memories/ecommerce-scraper-ecommerce-listing.memory.md

执行前:如果该文件存在,先读它 —— 它记录了过去执行中遇到过的意外情况;据此调整策略顺序。

执行后:如果遇到意外情况(策略失效、页面改版、反爬升级、发现更好路径),追加一行: {YYYY-MM-DD}: {发生了什么} → {结论}