네이버 폴백용 오픈마켓 크롤러 3종. 4중 복제를 피해 BrowserSearchAdapter 베이스로 브라우저 수명·프록시 회전·차단감지+IP회전 재시도·감지기록을 공유하고, 사이트 차이는 훅(_search_url/_parse/ready_selector/block_markers)으로 분리. - browser_base: patchright 공통 machinery(쿠팡 machinery 일반화) - card_parser: 오픈마켓 공용 카드 파서(CardConfig 주입) + util(extract_price/clean_name/shipping) - esm: G마켓·옥션(eBay 백엔드 공유, site 파라미터 1개로 커버, '잠시만' 챌린지 대기) - st11: 11번가 PC(공식API 판매자계정 필요라 불가). 지연로딩 → scroll_steps, '.c-card-item' 토큰 - 학습 반영: 오픈마켓은 리소스차단 OFF(렌더/챌린지 깨짐), 스턱 챌린지='잠시만' 잔존 시 차단 간주→IP회전 - 파서 결정론 테스트 7종(실렌더 카드 3개씩 경량 fixture). 라이브 검증: 신선 IP로 3사 모두 파싱 성공 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
21 lines
801 B
Python
21 lines
801 B
Python
"""11번가 PC 검색결과 셀렉터/설정.
|
|
|
|
11번가는 판매자 계정이 없어 공식 오픈API 불가 → PC 웹 크롤(모바일 m.11st 는 'robot' 차단).
|
|
PC total-search 는 챌린지 없이 렌더된다.
|
|
"""
|
|
|
|
from services.search.card_parser import CardConfig
|
|
|
|
SEARCH_URL = "https://search.11st.co.kr/pc/total-search?kwd={q}"
|
|
READY_SELECTOR = "[class*=c-card-item]"
|
|
|
|
CARDS = CardConfig(
|
|
source="st11", mall_name="11번가", base_url="https://search.11st.co.kr/",
|
|
# 카드 토큰 '.c-card-item' (렌더마다 '--list' 접미사 유무가 달라 접미사 매칭은 취약).
|
|
# 토큰 매칭이라 서브요소(c-card-item__name 등)는 안 잡힌다.
|
|
card=".c-card-item",
|
|
name="[class*=c-card-item__name]",
|
|
price="[class*=c-card-item__price]",
|
|
link="a[href]",
|
|
)
|