~/ecommerce/macys-scraper
Macy's Scraper——商品、价格、SKU 与新闻
提取 Macy's 的商品数据——价格、变体、SKU/UPC 条码、图片、评分与评论——以及 Macy's Inc. 新闻,覆盖搜索、分类、热门与商品 URL。无需浏览器。
百货商店
TypeScriptCrawleeCheerio
美国
分类ecommerce / 百货商店
语言TypeScript
技术栈TypeScript, Crawlee, Cheerio
市场美国
输出干净、RAG 就绪的 JSON
核心特性
一个 Actor 覆盖四大场景——商品搜索、分类、热门商品与 Macy's Inc. 新闻
无需浏览器,快速稳定——每页只需数秒,而不是数分钟
每个可购买变体的 SKU 均附带 UPC 条码、颜色、尺码、库存状态与价格
价格以整数美分存储,并附带本地化格式化字符串——杜绝浮点数舍入误差
完整的评论情报——星级分布直方图、推荐数,以及版型/尺码等二级评分
所有色号与尺码归并到同一条商品记录下,而非一个变体一行
只输出干净的规范网址——结果中不含跟踪或查询参数
search、category、trending 与商品详情结果统一采用同一套规范化 schema
应用场景
- SKU 级别的百货商店价格与促销监控
- 竞品分析——Macy's 对比 Nordstrom、Ulta 或品牌自营 DTC 定价
- 通过每个变体的 UPC 条码实现跨零售商的商品目录匹配
- 针对 Macy's 在售品牌的评论与评分情报
- 零售新闻监控——Macy's Inc. 的新闻稿与财报公告
输入参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
scrapeType | string | 必填 | 要抓取的场景:search、category、trending、news 或 all(默认:search)。 |
query | string | 可选 | 商品搜索关键词,例如 women shoes。 |
startUrls | array | 可选 | Macy's 商品页/分类页 URL,或 Macy's Inc. 新闻页 URL。 |
categoryIds | array | 可选 | Macy's 分类 ID(例如 5449)。已知分类页 URL 时优先使用 URL。 |
trendingUrls | array | 可选 | 热门、畅销或精选榜单页 URL。 |
newsUrls | array | 可选 | Macy's Inc. 新闻列表页或文章页 URL。 |
includeProductDetails | boolean | 可选 | 为列表条目补全完整商品详情——变体、SKU、图库(默认:true)。 |
maxPages | number | 可选 | 每个列表/新闻来源的最大分页深度。 |
maxResults | number | 可选 | 输出记录数上限。0 表示不限。 |
proxy | object | 必填 | Apify Proxy 或自定义代理 URL。推荐使用美国住宅代理。 |
输出示例
1{
2 "type": "product",
3 "source": {
4 "id": "12345678",
5 "canonicalUrl": "https://www.macys.com/shop/product/calvin-klein-womens-sheath-dress?ID=12345678",
6 "retailer": "macys",
7 "currency": "USD"
8 },
9 "title": "Women's Sleeveless Sheath Dress",
10 "brand": "Calvin Klein",
11 "categories": ["Women", "Dresses", "Work Dresses"],
12 "price": {
13 "sale": 5999,
14 "list": 9800,
15 "currentFormatted": "$59.99",
16 "stockStatus": "InStock"
17 },
18 "stats": { "rating": 4.6, "reviewCount": 9, "ratingPercentage": 92 },
19 "options": [
20 { "type": "Color", "values": [{ "id": "1", "name": "Black" }] },
21 { "type": "Size", "values": [{ "id": "10", "name": "M" }, { "id": "12", "name": "L" }] }
22 ],
23 "variants": [
24 {
25 "id": "987654",
26 "sku": "192837465012",
27 "options": ["Black", "M"],
28 "price": { "stockStatus": "InStock" },
29 "extraInfo": { "upc": "192837465012" }
30 }
31 ],
32 "medias": [{ "type": "Image", "url": "https://slimages.macysassets.com/is/image/MCY/products/.../main.jpg" }]
33}
价格
按事件计费——只对实际保存的条目计费:
| 事件 | 价格 | 说明 |
|---|---|---|
| 抓取一件商品 | $0.006 | 一件完整商品详情——变体、SKU/UPC、价格、图片、评分 |
| 抓取一篇文章 | $0.002 | 一篇 Macy’s Inc. 新闻文章——标题、作者、日期、正文、图片 |
更高级别的 Apify 套餐会自动享受批量折扣(低至每件商品 $0.0045)。按标价计算,抓取 1,000 件商品约为 $6.00。
使用建议
- 使用美国住宅代理。 商品详情端点会间歇性触发速率限制;住宅代理的会话轮换能顺利通过,而数据中心 IP 会遇到更多 403 错误。
- 保持适度并发。
maxConcurrency设为 2–3 是最佳区间——更高的值只会增加触发速率限制的概率,而不会提升吞吐量。 - 优先使用分类页 URL,而非裸 ID。 URL 中携带了 完整的分类路径;单独的 ID 可能会解析出范围过大或为空的结果集。
- 不需要变体或描述信息时,可关闭
includeProductDetails,实现快速的列表级抓取(名称、品牌、列表价格、图片、评分)。
常见问题
需要登录、cookie 或 API 密钥吗?
不需要。无需账号、cookie 或 API 密钥——只需 Apify 代理(推荐美国住宅代理)。
价格单位是美元还是美分?
以整数美分存储(5999 = $59.99),以避免浮点数舍入误差,同时附带本地化格式化字符串($59.99)。
变体与 UPC 是如何处理的?
所有颜色与尺码都归并在同一条商品记录的 variants[] 数组下。每个变体都携带各自的 UPC 条码、颜色、尺码、库存状态与价格——这些数据来自 Macy's 的 SKU 关系数据,而非从色卡组件上抓取。
可以在一次运行中同时抓取商品与新闻吗?
可以。将 scrapeType 设为 all,并按需组合提供 query、startUrls、categoryIds、trendingUrls 与 newsUrls。