Walmart는 Amazon 다음으로 미국에서 두 번째로 큰 온라인 쇼핑몰이며, 그 데이터는 전자상거래 비즈니스에 매우 중요합니다: 경쟁사 가격 모니터링, 재고 추적, 상품 분석. 문제는 Walmart가 PerimeterX라는 고급 봇 방지 시스템을 사용하여 파서의 요청 중 90%를 첫 페이지에서 차단한다는 것입니다.
이 가이드에서는 Walmart 파싱에 실제로 작동하는 프록시 유형, IP 주소 회전 설정 방법, 브라우저 지문 우회 및 한 시간 작업 후에도 중단되지 않는 안정적인 데이터 수집 시스템 구축 방법을 살펴보겠습니다.
Walmart가 파서를 차단하는 이유: PerimeterX 보호 메커니즘
Walmart는 PerimeterX(현재 HUMAN Security라고 불림)라는 보호 시스템을 사용합니다. 이는 시장에서 가장 공격적인 봇 방지 시스템 중 하나입니다. 이 시스템은 요청을 수십 가지 매개변수로 분석하고 의심스러운 트래픽을 차단하여 파서가 페이지의 HTML 코드를 받기 전에 차단합니다.
Walmart의 주요 보호 메커니즘:
1. IP 평판 분석
PerimeterX는 각 IP 주소를 알려진 프록시 서버, 데이터 센터 및 VPN 데이터베이스와 비교합니다. 해당 IP가 데이터베이스에 있다면 차단되거나 CAPTCHA를 받게 됩니다. Walmart는 특히 인기 있는 클라우드 제공업체(AWS, Google Cloud, DigitalOcean)의 IP를 엄격하게 필터링합니다.
2. 행동 분석
시스템은 사용자가 페이지와 상호작용하는 방식을 추적합니다: 마우스 움직임, 스크롤 속도, 클릭. Selenium이나 Puppeteer를 사용하는 파서는 종종 여기서 적발됩니다. 페이지를 너무 빠르게 열고 자연스러운 간격 없이 마우스를 움직이지 않기 때문입니다.
3. TLS 및 HTTP 지문
PerimeterX는 연결의 TLS 지문(암호화 순서, 확장) 및 HTTP 요청 헤더를 분석합니다. 표준 Python 라이브러리(요청, urllib)는 쉽게 인식할 수 있는 고유한 지문을 가지고 있습니다. User-Agent를 변경하더라도 시스템은 헤더와 실제 브라우저 간의 불일치를 감지합니다.
4. JavaScript 챌린지
의심스러운 요청이 있을 경우 PerimeterX는 브라우저에서 확인을 수행하는 JavaScript 코드를 전송합니다: Canvas API 접근 가능 여부, WebGL, 화면 설정, 설치된 글꼴. 단순한 HTTP 파서는 이 코드를 실행할 수 없으므로 차단됩니다.
차단 시 발생하는 일:
- HTTP 403 Forbidden — 가장 일반적인 응답으로, IP 또는 지문이 블랙리스트에 있다는 의미입니다.
- CAPTCHA 페이지로 리디렉션 — 시스템이 확신하지 못해 사용자가 인간임을 증명할 기회를 줍니다.
- 빈 페이지 또는 오류가 있는 JSON — 서버가 콘텐츠를 전혀 제공하지 않습니다.
- IP의 임시 차단 15-60분 — 한 주소에서 공격적으로 파싱할 경우 발생합니다.
주요 결론: Walmart를 성공적으로 파싱하려면 프록시가 하나의 요소일 뿐인 종합적인 전략이 필요합니다. 올바른 브라우저 엔진, 인간 행동 모방 및 IP 주소의 적절한 회전도 필요합니다.
Walmart 파싱에 효과적인 프록시: 유형 비교
모든 프록시가 Walmart의 보호를 우회하는 데 동일하게 효과적인 것은 아닙니다. 네 가지 주요 유형과 파싱 작업에 대한 적용 가능성을 살펴보겠습니다.
| 프록시 유형 | Walmart에 대한 효과 | 속도 | 비용 | 추천 |
|---|---|---|---|---|
| 주거용 프록시 | ⭐⭐⭐⭐⭐ 우수 — 실제 사용자 IP, 최소 차단 |
중간 (200-800 ms) |
높음 ($7-15/GB부터) |
프로덕션에 최적 |
| 모바일 프록시 | ⭐⭐⭐⭐⭐ 우수 — 높은 신뢰 점수, 드문 차단 |
낮음 (500-1500 ms) |
매우 높음 (IP당 $50-100/월부터) |
복잡한 경우에 적합 |
| 데이터 센터 프록시 | ⭐⭐ 불량 — 높은 차단 확률 (70-90%) |
높음 (50-150 ms) |
낮음 (IP당 $1-3부터) |
추천하지 않음 |
| ISP 프록시 | ⭐⭐⭐⭐ 양호 — 정적 주거용 IP |
높음 (80-200 ms) |
중간 (IP당 $30-80/월부터) |
장기 작업에 적합 |
각 유형에 대한 자세한 내용:
주거용 프록시 — Walmart의 금본위제
이는 실제 가정용 인터넷 제공업체(미국의 Comcast, AT&T, Verizon)의 IP 주소입니다. Walmart는 이를 일반 구매자로 인식하므로 차단 비율이 최소화됩니다 — 올바른 설정 시 약 5-10%입니다. 주요 장점은 방대한 주소 풀(수백만 IP)로 효과적인 회전을 설정할 수 있다는 것입니다.
사용 시기: 수천 개 상품의 가격 모니터링, 일일 데이터 수집, 장기 프로젝트. Walmart 파싱을 위해 주거용 프록시는 효율성과 비용 측면에서 최적의 선택입니다.
모바일 프록시 — 최대의 신뢰성
모바일 통신사(IP T-Mobile, Verizon Wireless)는 봇 방지 시스템에서 가장 높은 신뢰 점수를 가지고 있습니다. 이유는 하나의 IP가 수천 명의 실제 사용자가 공유하기 때문입니다(NAT를 통해). 따라서 이를 차단하는 것은 수천 명의 구매자를 차단하는 것과 같습니다. Walmart는 모바일 IP를 거의 차단하지 않습니다.
사용 시기: 주거용 프록시가 효과가 없을 때, 특히 보호된 섹션(예: 특정 지역의 가격)을 파싱해야 할 때, 예산이 허용되는 경우. 모바일 프록시는 거의 100% 성공적인 요청을 제공하지만 비용이 더 비쌉니다.
데이터 센터 프록시 — Walmart에 적합하지 않음
데이터 센터(AWS, OVH, Hetzner)의 서버 IP 주소는 PerimeterX에 의해 즉시 인식됩니다. 파싱에 사용되지 않았던 "깨끗한" IP를 구매하더라도 시스템은 여전히 데이터 센터임을 인식합니다. 차단 비율은 70-90%입니다.
유일한 사용 시나리오: 소규모 데이터(10-50 페이지)에서 파서 테스트. 프로덕션에는 절대 적합하지 않습니다.
ISP 프록시 (정적 주거용)는 하이브리드입니다: 가정용 제공업체의 IP지만 데이터 센터에 위치하고 장기간(한 달 이상) 제공됩니다. 일반 주거용 프록시보다 빠르지만 더 비싸고 주소 풀이 제한적입니다. 동일한 카테고리 상품에 대한 장기 파싱을 위해 안정적인 IP가 필요한 경우 적합합니다.
주거용 vs 데이터 센터 프록시: 귀하의 작업에 적합한 선택
주거용 프록시가 더 효과적이라는 것을 이미 알았지만, 각 유형이 정당화될 수 있는 상황을 자세히 살펴보고 실제 소유 비용을 계산해 보겠습니다.
시나리오 1: 매일 10,000개 상품 모니터링
주거용 프록시 사용 시:
- Walmart 상품 페이지의 평균 크기: ~500 KB
- 10,000 상품 × 500 KB = 하루 5 GB 트래픽
- 월간 트래픽: 150 GB
- 비용: $10/GB 기준: $1,500/월
- 성공적인 요청 비율: 90-95%
- 재요청을 고려한 실제 비용: ~$1,650/월
데이터 센터 프록시 사용 시 (이론적으로):
- 100 IP 비용: ~$200/월
- 성공적인 요청 비율: 10-30% (나머지는 차단됨)
- 각 상품에 대해 3-10번의 시도를 해야 함
- 실제 트래픽: 15-50 GB (재요청으로 인해)
- 결론: 작업 수행 불가능 — IP가 빠르게 차단되고, 매 단계마다 CAPTCHA가 발생함
시나리오 2: 500개 상품에 대한 일회성 데이터 수집
시장 분석이나 연구를 위해 데이터를 한 번 수집해야 하는 경우, 혼합 접근 방식을 시도할 수 있습니다:
- 상품 URL의 초기 수집을 위해 데이터 센터 프록시 사용
- 상품에 대한 상세 정보를 얻기 위해 주거용 프록시로 전환
- 비용: ~$50-100의 일회성 작업
- 소요 시간: 데이터 센터를 사용할 경우 10-20시간 대신 2-4시간
선택의 주요 요소:
| 기준 | 주거용 | 데이터 센터 |
|---|---|---|
| 데이터 양 | 어떤 양이든 — 100페이지에서 수백만 페이지까지 | 소량만 가능 (1000페이지까지) |
| 정기성 | 일일/주간 파싱 | 일회성 작업만 가능 |
| 실행 속도 | 안정적 — 재요청에 대한 지연 없음 | 예측 불가능 — 재요청이 많음 |
| 신뢰성 | 높음 — 90-95% 성공률 | 낮음 — 10-30% 성공률 |
| 오류 비용 | 낮음 — 성공적인 트래픽에 대해서만 비용 지불 | 높음 — 차단으로 인해 시간과 비용 손실 |
결론: Walmart의 모든 심각한 파싱 작업에는 주거용 또는 모바일 프록시를 사용하십시오. 데이터 센터 프록시는 10-50페이지에서 파서의 논리를 테스트하는 경우에만 고려할 수 있으며, 프로덕션에는 적합하지 않습니다. 프록시에서 절약하면 시간과 스트레스를 잃게 되고 결국 더 비쌀 수 있습니다.
IP 회전 전략: 변경 빈도 및 주소 풀
주거용 프록시를 사용하더라도 IP 주소 회전을 잘못 설정하면 차단될 수 있습니다. PerimeterX는 행동 패턴을 추적합니다: 하나의 IP가 1분에 100개의 상품 페이지를 요청하면 이는 분명히 봇입니다. 올바른 회전 전략이 차단 없이 안정적인 파싱의 열쇠입니다.
세 가지 주요 회전 전략:
1. 요청마다 회전 (Rotating Proxies)
각 HTTP 요청은 새로운 IP 주소를 통해 전송됩니다. 이는 대부분의 주거용 프록시 제공업체의 표준 작동 모드입니다.
장점:
- 최소한의 차단 위험 — 각 IP는 1-2개의 요청만 수행
- 간단한 설정 — 제공업체가 풀을 관리
- 공격적으로 파싱 가능 — 분당 수백 개의 요청
단점:
- 세션 문제 — 사이트가 쿠키를 사용하면 각 요청이 새로운 세션으로 간주됨
- 느림 — 새로운 연결을 설정하는 데 200-500 ms 소요
사용 시기: Walmart 상품 페이지를 파싱할 때, 인증이나 세션이 필요하지 않은 경우. 이는 가격 모니터링 작업의 대부분에 최적의 전략입니다.
2. Sticky Sessions (고정 세션)
하나의 IP 주소가 일정 시간(보통 5-30분) 동안 일련의 요청에 사용되며, 이후 새로운 IP로 변경됩니다.
장점:
- 세션 및 쿠키 유지 — 장바구니, 인증 작업 가능
- 빠름 — TCP 연결 재사용
- 봇 방지 시스템에 더 "자연스러운" 행동
단점:
- 차단 위험 증가 — 하나의 IP가 10-50개의 요청을 수행
- 한도 관리 필요 — 하나의 IP에서 30-50개의 요청 초과 금지
사용 시기: 인증이 필요한 데이터를 파싱해야 할 때(예: 등록된 사용자 가격) 또는 실제 구매자 행동을 에뮬레이션하는 경우(카테고리 → 상품 → 장바구니 추가).
3. 수동 회전이 있는 정적 IP 풀
50-100개의 정적 주거용 IP(ISP 프록시)를 가져와 요청 분배를 직접 관리합니다.
장점:
- 완전한 제어 — 각 IP가 얼마나 많은 요청을 했는지 알 수 있음
- 최대 속도 — 정적 IP가 회전 IP보다 빠름
- IP "워밍업" 가능 — 평판을 높이기 위해 합법적인 요청 수행
단점:
- 복잡한 설정 — 요청 분배 로직을 작성해야 함
- 비쌈 — ISP 프록시 비용이 IP당 월 $30-80
- IP 손실 위험 — 하나가 차단되면 교체해야 함
사용 시기: 하루 100,000개 이상의 요청이 필요한 고부하 시스템에 적합하며, 속도와 안정성이 중요합니다. 파서 개발 경험이 필요합니다.
Walmart에 대한 권장 설정:
가격 모니터링을 위한 (상품 페이지 간단 파싱):
- 유형: 요청마다 회전하는 프록시
- 요청 간 지연: 2-5초
- 병렬성: 10-20 스레드
- 지리적 위치: 미국 (가능하면 Walmart의 실제 매장이 있는 주)
복잡한 파싱을 위한 (인증, 장바구니 포함):
- 유형: 10-15분 지속되는 고정 세션
- IP당 요청 한도: 최대 30-40
- 요청 간 지연: 3-7초 (인간 모방)
- 병렬성: 5-10 스레드 (공격성 감소)
중요: 많은 주거용 프록시 제공업체가 연결 매개변수를 통해 세션 지속 시간을 설정할 수 있도록 허용합니다. 예를 들어, 사용자 이름에 session-15min을 추가하면 15분 동안 고정 세션을 얻을 수 있습니다. 이 가능성에 대해 제공업체에 확인하십시오.
지문 우회: User-Agent, 헤더 및 TLS 지문
프록시는 문제의 절반만 해결합니다 — 깨끗한 IP를 제공합니다. 그러나 PerimeterX는 IP뿐만 아니라 브라우저나 파서의 "지문"도 분석합니다. 주거용 IP를 사용하더라도 HTTP 클라이언트가 봇처럼 보이면 차단됩니다.
PerimeterX가 확인하는 사항:
1. User-Agent 및 HTTP 헤더
표준 라이브러리(Python requests, Node.js axios)는 즉시 봇을 드러내는 헤더를 보냅니다. 예를 들어, User-Agent: python-requests/2.28.1는 100% 차단됩니다.
변경해야 할 사항:
User-Agent— 최신 Chrome/Firefox 버전 사용Accept— 콘텐츠 유형에 맞아야 함Accept-Language— Walmart 미국 파싱을 위해 en-USAccept-Encoding— gzip, deflate, brReferer— 이전 페이지 (카테고리 또는 메인)Sec-Fetch-*— CSRF 보호를 위한 Chrome 헤더
2. TLS 지문 (JA3)
각 HTTP 클라이언트는 고유한 TLS 지문(암호화 순서, TLS 확장, 프로토콜 버전)을 가지고 있습니다. PerimeterX는 이 지문을 User-Agent와 비교합니다: "Chrome 120"이라고 작성하고 TLS 지문이 Python에서 온 경우 — 차단됩니다.
해결책:
- 커스텀 TLS를 지원하는 라이브러리 사용:
curl-impersonate(Python),tls-client(Go) - 또는 Selenium/Puppeteer를 통해 실제 브라우저 사용 — 이들은 진짜 TLS 지문을 가지고 있습니다.
3. JavaScript 챌린지 및 Canvas 지문
PerimeterX는 Canvas API 접근 가능 여부, WebGL, 설치된 글꼴, 화면 크기, 시간대 등을 확인하는 JavaScript 코드를 보낼 수 있습니다. 단순한 HTTP 파서는 이 코드를 실행할 수 없습니다.
해결책:
- 헤드리스 브라우저 사용: Puppeteer, Playwright, Selenium
- 탐지 우회 모드 활성화:
puppeteer-extra-plugin-stealth사용 - 매개변수 랜덤화: 창 크기, 시간대, 브라우저 언어
Walmart 파싱을 위한 올바른 헤더 예시:
GET /ip/Product-Name/12345678 HTTP/1.1
Host: www.walmart.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br
Referer: https://www.walmart.com/browse/electronics/tv-video/3944_1060825
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
Connection: keep-alive
중요한 세부 사항:
- 헤더 순서가 중요합니다 — 실제 브라우저는 특정 순서로 헤더를 전송합니다. 이 순서를 준수하는 라이브러리를 사용하십시오.
- 쿠키 — PerimeterX가
_px3또는_pxvid쿠키를 설정했다면, 다음 요청에서 반드시 이를 전송해야 합니다. 이는 세션의 토큰입니다. - HTTP/2 — Walmart는 HTTP/2를 사용하며, 이 프로토콜을 지원하지 않으면 봇 신호가 될 수 있습니다. 클라이언트가 HTTP/2를 지원하는지 확인하십시오.
- 모든 요청에 동일한 헤더를 사용하지 마십시오 — User-Agent를 다양하게 하고, 10-20개의 서로 다른 브라우저 버전 풀을 사용하십시오.
요청 제한 및 지연: 요청 한도를 초과하지 않는 방법
완벽한 프록시와 헤더를 사용하더라도 너무 공격적으로 파싱하면 차단됩니다. Walmart는 요청 빈도와 행동 패턴을 추적합니다. 실제 사용자는 1분에 100개의 상품 페이지를 열 수 없습니다 — 봇 방지 시스템이 이를 인식합니다.
Walmart에 대한 권장 한도:
| 요청 유형 | 요청 간 지연 | 하나의 IP에서 최대 요청 수 | 병렬성 |
|---|---|---|---|
| 상품 페이지 | 2-5초 | 30-50 페이지 (회전 사용 시) | 10-20 스레드 |
| 카테고리 페이지 | 3-7초 | 20-30 페이지 | 5-10 스레드 |
| 검색 | 5-10초 | 10-15 요청 | 3-5 스레드 |
| API 엔드포인트 | 1-3초 | 50-100 요청 | 20-30 스레드 |
지연 랜덤화가 중요한 이유:
요청을 정확히 3초마다(3.000, 6.000, 9.000...) 수행하면, 봇 방지 시스템이 패턴을 인식합니다. 실제 사람은 그렇게 정확할 수 없습니다 — 변동이 있을 것입니다: 2.8초, 3.4초, 2.9초.
지연 구현 예시 (Python):
import random
import time
# 잘못된 방법 — 고정 지연
time.sleep(3)
# 올바른 방법 — 랜덤화된 지연
delay = random.uniform(2.0, 5.0) # 2초에서 5초 사이
time.sleep(delay)
부하 관리 전략:
1. 적응형 요청 제한
성공적인 요청 비율을 추적하십시오. 403 또는 CAPTCHA를 받기 시작하면 지연을 자동으로 늘리고 병렬성을 줄이십시오.
success_rate = successful_requests / total_requests
if success_rate < 0.8: # 성공률 80% 미만
delay_multiplier *= 1.5 # 지연 증가
parallel_workers -= 2 # 스레드 감소
elif success_rate > 0.95: # 성공률 95% 초과
delay_multiplier *= 0.9 # 속도 증가 가능
parallel_workers += 1
2. 시간대에 따른 분배
실제 사용자의 피크 활동 시간(미국 저녁, 18:00-22:00 EST)에 파싱하십시오. 이 시간 동안 귀하의 트래픽은 합법적인 트래픽과 섞이며, 봇 방지 시스템이 덜 공격적입니다. 밤(2:00-6:00 EST)에는 실제 사용자가 적어 방어가 더 엄격할 수 있습니다.
3. IP 주소 워밍업
대량 파싱을 시작하기 전에 IP 주소를 합법적인 요청으로 "워밍업"하십시오: 메인 페이지, 몇 개의 카테고리, 검색을 열어보십시오. 이는 활동 기록을 생성하고 IP의 신뢰 점수를 높입니다.
# 새로운 IP에 대한 워밍업 순서
1. GET https://www.walmart.com/ # 메인
2. 지연 3-5초
3. GET https://www.walmart.com/browse/electronics # 카테고리
4. 지연 4-7초
5. GET https://www.walmart.com/search?q=laptop # 검색
6. 지연 3-6초
# 이제 목표 상품을 파싱할 수 있습니다.
치명적인 오류: 모든 요청에 동일한 Referer를 사용하지 마십시오. 1000개의 상품을 파싱하고 모두 동일한 Referer 헤더를 가지고 있다면 — 이는 명백한 봇 패턴입니다. 변화를 주십시오.