NormalizedProduct 에 shipping_type(rocket|rocket_merchant|free|paid|None) 추가. 쿠팡 파서: 로켓 뱃지(img src)로 유형, '무료배송'/'배송비 X원' 텍스트로 금액 판별 (상품명 '무료배송' 오탐은 이름 제거 후 매칭). 네이버 lprice 는 배송비 제외 상품가라 배송 필드 None — 카탈로그 '배송비포함 최저가'와 다른 이유를 docs/api.md 에 명시. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
26 lines
1.1 KiB
Python
26 lines
1.1 KiB
Python
"""쿠팡 검색결과 셀렉터(외부화).
|
|
|
|
쿠팡 클래스는 webpack 해시 suffix(예: ProductUnit_productUnit__Qd6sv)를 달고 있어
|
|
배포마다 suffix 가 바뀐다. 따라서 접두 부분 매칭([class*=...])으로 견고성을 확보한다.
|
|
레이아웃이 바뀌면 이 파일만 고치면 되도록 파서에서 분리한다(new.md: 셀렉터 외부 설정).
|
|
"""
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CoupangSelectors:
|
|
card: str = "li[class*=ProductUnit_productUnit]"
|
|
name: str = "[class*=ProductUnit_productNameV2]"
|
|
price_area: str = "[class*=PriceArea_priceArea]"
|
|
orig_price: str = "del" # price_area 내부: 정가(취소선)
|
|
link: str = "a[href]"
|
|
image: str = "figure img"
|
|
data_id_attr: str = "data-id" # li 의 vendorItemId
|
|
# 배송 뱃지: 로고 이미지 src 로 판별(배송 텍스트는 해시 없는 인라인 스타일 span 이라 텍스트 매칭).
|
|
rocket_badge: str = "img[src*=rocket]"
|
|
rocket_merchant_marker: str = "rocket_merchant" # src 에 포함 시 판매자로켓, 그 외 rocket* 는 로켓배송
|
|
|
|
|
|
SELECTORS = CoupangSelectors()
|