~/ecommerce/macys-scraper
Macy's Scraper — 상품, 가격, SKU 및 뉴스
Macy's 상품 데이터 — 가격, 상품 변형, SKU/UPC 바코드, 이미지, 평점 및 리뷰 — 를 검색, 카테고리, 트렌딩, 상품 URL에서 추출하고, Macy's Inc. 뉴스까지 함께 수집합니다. 브라우저 없이도 Akamai 방어를 뚫습니다.
백화점
TypeScriptCrawleeCheerio
미국
카테고리ecommerce / 백화점
언어TypeScript
스택TypeScript, Crawlee, Cheerio
마켓미국
출력클린한 RAG-레디 JSON
주요 기능
하나의 액터에 4가지 소스 — 상품 검색, 카테고리, 트렌딩, Macy's Inc. 뉴스
Macy's 자체의 모바일 및 웹사이트 JSON API를 활용해 브라우저 없이 Akamai Bot Manager를 우회
구매 가능한 모든 상품 변형에 대해 색상, 사이즈, 재고, 가격과 함께 SKU별 UPC 바코드 제공
정수 센트 단위 가격과 로케일 포맷 문자열을 함께 제공 — 부동소수점 반올림 오류 없음
완전한 리뷰 인텔리전스 — 별점 히스토그램, 추천 수, 핏/사이즈 보조 평점
변형마다 별도 행이 아니라 모든 색상과 사이즈를 하나의 상품 레코드로 그룹화
클린한 캐노니컬 URL만 제공 — 내부 API 엔드포인트와 클라이언트 키는 출력에 절대 노출되지 않음
검색, 카테고리, 트렌딩, 상품 상세 결과 전반에 걸친 단일 정규화 스키마
활용 사례
- 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 사용을 권장. |
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, 가격, 이미지, 평점)를 포함한 상품 1건 |
| 기사 크롤링 | $0.002 | Macy’s Inc. 뉴스 기사 1건 — 제목, 작성자, 날짜, 본문, 이미지 |
상위 Apify 플랜에서는 볼륨 할인이 자동 적용됩니다(최저 상품당 $0.0045). 1,000개 상품 크롤링은 정가 기준 약 $6.00입니다.
팁
- 미국 레지덴셜 프록시를 사용하세요. 상품 상세 엔드포인트는 간헐적으로 레이트 리밋에 걸립니다. 레지덴셜 세션 로테이션은 깔끔하게 통과하지만, 데이터센터 IP는 403을 더 자주 만납니다.
- 동시성은 적당히 유지하세요.
maxConcurrency2~3이 최적 구간입니다 — 그보다 높이면 처리량 향상 없이 레이트 리밋만 더 자주 발생합니다. - 단독 ID보다는 카테고리 URL을 사용하세요. URL에는 API가 기대하는 카테고리 경로가 담겨 있습니다 — 단독 ID만 사용하면 더 광범위하거나 빈 결과 집합으로 해석될 수 있습니다.
- 상품 변형이나 설명이 필요 없다면
includeProductDetails를 꺼서 빠른 리스팅 수준 스윕(이름, 브랜드, 리스팅 가격, 이미지, 평점)을 수행하세요.
자주 묻는 질문
브라우저 없이 어떻게 Akamai를 통과하나요?
JS 챌린지와 아예 싸우지 않습니다. 리스팅은 Macy's 모바일 앱 API에서, 상품 상세는 웹사이트의 JSON API에서 가져오는데, 둘 다 익명 읽기 요청에 응답하는 별도의 인프라에서 동작합니다. 로그인도, 쿠키도, API 키도 필요 없습니다.
가격은 달러 단위인가요, 센트 단위인가요?
부동소수점 반올림 오류를 피하기 위해 정수 센트 단위(5999 = $59.99)로 제공하며, 로케일 포맷 문자열($59.99)도 함께 제공합니다.
상품 변형과 UPC는 어떻게 처리되나요?
모든 색상과 사이즈는 variants[] 배열을 가진 하나의 상품 레코드로 그룹화됩니다. 각 변형은 고유한 UPC 바코드, 색상, 사이즈, 재고, 가격을 담고 있으며, 이는 스와치 위젯을 긁어낸 것이 아니라 Macy's의 SKU 관계 데이터에서 복원한 것입니다.
한 번의 실행으로 상품과 뉴스를 모두 크롤링할 수 있나요?
네. scrapeType을 all로 설정하고 query, startUrls, categoryIds, trendingUrls, newsUrls를 원하는 대로 조합해 제공하면 됩니다.