마켓플레이스에서 상품 특성을 파싱하는 것은 판매자, 분석가 및 가격 집계자에게 매우 중요한 작업입니다. Wildberries, Ozon, Yandex.Market 및 기타 플랫폼은 고급 안티봇 시스템을 사용하여 자동 데이터 수집을 적극적으로 차단합니다. 제대로 설정된 프록시 없이는 파서가 50-100개의 요청 후에 차단될 수 있습니다. 이 기사에서는 파싱에 적합한 프록시 유형, IP 회전 설정 방법 및 주요 마켓플레이스의 보호를 우회하는 방법을 살펴보겠습니다.
마켓플레이스가 파싱을 차단하는 이유와 작동 방식
현대 마켓플레이스는 파싱으로 인해 수백만 루블을 잃고 있습니다: 경쟁자가 상품 설명을 복사하고, 집계자가 트래픽을 가로채며, 서버에 대한 부하가 증가합니다. 따라서 Wildberries, Ozon, Yandex.Market 및 기타 플랫폼은 자동 데이터 수집에 대한 다단계 보호를 도입했습니다.
마켓플레이스가 파싱을 어떻게 인식하는가:
- 하나의 IP에서의 요청 빈도 — 하나의 주소에서 분당 100개 이상의 요청이 들어오면 이는 봇의 명백한 징후입니다. 일반 사용자는 이 시간 동안 5-10개의 상품 카드만 조회합니다.
- JavaScript 부재 — requests 또는 curl을 사용하는 간단한 파서는 가격 및 특성을 로드하는 JS 코드를 실행하지 않습니다. 사이트는 콘텐츠가 렌더링 없이 요청되고 있음을 인식합니다.
- User-Agent 및 헤더 — 라이브러리의 기본 헤더(예: "python-requests/2.28.0")는 즉시 봇을 드러냅니다. Accept-Language, Referer 헤더의 부재도 의심스럽습니다.
- 브라우저 지문 — 고급 시스템(Cloudflare, Kasada, DataDome)은 Canvas, WebGL, 글꼴, 브라우저 확장을 분석합니다. Puppeteer와 같은 헤드리스 브라우저는 일부 매개변수가 없기 때문에 쉽게 식별됩니다.
- 행동 패턴 — 봇은 동일한 간격으로 상품 카드를 열고(예: 정확히 2초마다), 페이지를 스크롤하지 않으며, 마우스를 움직이지 않습니다. 이는 그를 살아있는 사람과 구별합니다.
차단의 결과: 1-24시간 동안의 IP 임시 차단, 각 요청에 대한 CAPTCHA, 데이터 센터의 IP 범위 완전 차단. 이는 비즈니스에 데이터 수집 중단 및 경쟁 우위 상실을 의미합니다.
실제 사례: 가격 집계자는 10개의 데이터 센터 IP로 Wildberries를 파싱하며, 각 IP에서 시간당 500개의 요청을 수행했습니다. 3일 후, 전체 /24 범위가 영구 차단되었고 — 프록시 공급자를 변경하고 회전하는 주거용 IP로 전환해야 했습니다.
상품 파싱을 위한 프록시 유형 비교
상품 특성을 파싱하기 위해서는 세 가지 주요 유형의 프록시가 사용됩니다. 각 유형은 데이터 양, 예산 및 속도 요구 사항에 따라 장점과 제한이 있습니다.
| 프록시 유형 | 속도 | 차단 위험 | 비용 | 언제 사용해야 하는가 |
|---|---|---|---|---|
| 데이터 센터 프록시 | 높음 (50-200 ms) | 높음 | 낮음 | 소량 파싱(하루 10,000개 이하), 파서 테스트 |
| 주거용 프록시 | 중간 (200-800 ms) | 낮음 | 높음 (트래픽 기준) | 봇 보호가 있는 Wildberries, Ozon 파싱, 대량 데이터 |
| 모바일 프록시 | 중간 (300-1000 ms) | 매우 낮음 | 매우 높음 | 최대 보호가 필요한 파싱, 강력한 차단 우회, 중요한 프로젝트 |
데이터 센터 프록시는 데이터 센터(AWS, Hetzner, OVH)의 서버 IP 주소입니다. 빠르고 저렴하지만 마켓플레이스는 ASN 데이터베이스를 통해 쉽게 식별합니다. 소규모 카탈로그(하루 10,000개 이하) 또는 심각한 보호가 없는 플랫폼에 적합합니다. 비용: IP당 월 1-3달러.
주거용 프록시는 SDK를 통해 애플리케이션에서 합법적으로 얻은 가정 사용자 IP입니다. 마켓플레이스는 이를 일반 구매자로 인식합니다. Wildberries, Ozon, Yandex.Market의 대량 파싱에 이상적입니다. 비용: 트래픽 1GB당 5-15달러(약 10,000-30,000 요청).
모바일 프록시는 모바일 운영자(MTS, Beeline, MegaFon)의 IP입니다. 보호 우회를 위한 가장 신뢰할 수 있는 유형이지만 비싸고 느립니다. 차단이 허용되지 않는 중요한 작업에만 사용하십시오. 비용: IP당 월 50-150달러, 회전 포함.
주거용 또는 데이터 센터: 귀하의 작업에 적합한 선택
프록시 유형 선택은 세 가지 요소에 따라 다릅니다: 파싱 양, 플랫폼의 보호 수준 및 예산. 구체적인 사용 시나리오를 살펴보겠습니다.
데이터 센터 프록시가 적합한 경우
시나리오 1: 파서 테스트
새로운 파서를 개발하고 데이터 추출 논리를 확인합니다. 디버깅을 위해 100-500개 상품을 파싱해야 합니다. 이 경우 주거용 프록시는 과도한 비용입니다. 5-10개의 데이터 센터 IP를 사용하고 각 IP에서 시간당 50-100개의 요청을 수행하십시오. 차단 없이 테스트하기에 충분합니다.
시나리오 2: 보호가 없는 플랫폼 파싱
소규모 지역 마켓플레이스, Avito와 같은 광고 게시판(일부 카테고리), OpenCart의 인터넷 상점은 종종 심각한 안티봇 시스템이 없습니다. 이 경우 데이터 센터는 적당한 부하(시간당 IP당 200개 요청)에서 안정적으로 작동합니다.
시나리오 3: 제한된 예산과 소량
하루 5,000-10,000개의 상품을 파싱해야 하고 예산이 제한된 경우, 공격적인 회전(50-100 요청마다 IP 변경)을 사용하는 데이터 센터를 시도하십시오. 차단이 더 많아지겠지만, 올바른 재시도 로직(새로운 IP로 요청 재전송)을 설정하면 작동합니다.
주거용 프록시가 필요한 경우
시나리오 1: Wildberries 및 Ozon 파싱
이 플랫폼은 Cloudflare, DataDome 및 자체 안티봇 시스템을 사용합니다. 데이터 센터에서 20-50개의 요청 후 CAPTCHA 또는 차단을 받을 수 있습니다. 5-10분마다 회전하는 주거용 프록시는 수십만 개의 상품을 문제없이 파싱할 수 있게 해줍니다. 한 고객은 1,000개의 주거용 IP 풀을 사용하여 Wildberries의 전체 카탈로그(2천만 개 이상의 상품)를 일주일 만에 파싱했습니다.
시나리오 2: 인증이 필요한 파싱
일부 상품 특성(도매 가격, 재고)은 인증된 사용자만 접근할 수 있습니다. 계정을 통해 파싱하는 경우 데이터 센터를 사용하면 계정이 차단됩니다. 주거용 프록시는 실제 사용자의 행동을 모방하여 차단 위험을 줄입니다.
시나리오 3: 지리적 타겟팅
Wildberries, Ozon, Yandex.Market의 상품 가격 및 재고는 사용자 지역에 따라 다릅니다. 동시에 모스크바, 상트페테르부르크, 예카테린부르크에 대한 데이터를 수집하려면 도시 선택이 가능한 주거용 프록시가 필요합니다. 데이터 센터는 지리적 위치를 정확하게 제어할 수 없습니다.
프록시 유형 선택 공식:
- 양 < 10,000 상품/일 + 강력한 보호 없음 = 데이터 센터
- 양 > 10,000 상품/일 + Wildberries/Ozon = 주거용
- 인증이 필요한 파싱 + 계정 차단 위험 = 주거용
- 러시아 도시별 지리적 타겟팅 필요 = 주거용
- 중요한 프로젝트 + 차단에 대한 제로 내성 = 모바일
IP 회전 설정: 간격 및 전략
IP 회전은 특정 요청 수 또는 시간 후에 프록시 서버를 자동으로 변경하는 것입니다. 올바른 회전 설정은 차단 없이 안정적인 파싱의 핵심입니다.
프록시 회전 유형
1. 시간 기반 회전 (Time-based rotation)
IP는 고정 간격(5분, 10분, 30분)마다 변경됩니다. 가장 간단한 방법이지만 가장 효과적이지는 않습니다. 5분 동안 200개의 요청을 수행하는 경우, 플랫폼의 한계가 IP당 100개의 요청이라면 여전히 차단될 것입니다.
사용 시기: 낮은 부하의 주거용 프록시에 대해(각 IP당 50개 요청 이하). 예를 들어, Wildberries를 요청 간격 3-5초로 파싱하는 경우, 10분마다 회전하는 것이 최적입니다.
2. 요청 수 기반 회전 (Request-based rotation)
IP는 N개의 요청 후에 변경됩니다: 50, 100, 200. 시간 기반 회전보다 정확하지만 파서 코드에서 요청 수 카운터를 추적해야 합니다.
사용 시기: 데이터 센터 및 공격적인 파싱을 위해. 예를 들어, Ozon이 IP당 80개의 요청 후에 차단된다는 것을 알고 있다면 — 여유를 두고 70개의 요청마다 회전을 설정하십시오.
3. 요청마다 회전 (Per-request rotation)
각 요청은 새로운 IP를 통해 진행됩니다. 차단에 대한 최대 보호를 제공하지만 주거용 프록시의 경우 가장 비싼 전략입니다(새로운 연결을 설정하기 때문에 트래픽 소비가 증가합니다).
사용 시기: 가장 강력한 보호를 우회하기 위해(Cloudflare의 "Under Attack" 모드), 계정 차단 위험이 높은 파싱, 파싱을 추적하는 경쟁자의 데이터 수집을 위해.
인기 플랫폼에 대한 추천 회전 간격
| 플랫폼 | 프록시 유형 | 회전 간격 | 요청 간의 지연 |
|---|---|---|---|
| Wildberries | 주거용 | 5-10분마다 또는 50개의 요청마다 | 2-4초 |
| Ozon | 주거용 | 7-12분마다 또는 60개의 요청마다 | 3-5초 |
| Yandex.Market | 주거용 | 10-15분마다 또는 80개의 요청마다 | 2-3초 |
| Avito (상품 카테고리) | 데이터 센터 | 15-20분마다 또는 100개의 요청마다 | 1-2초 |
| AliExpress | 주거용 | 3-5분마다 또는 30개의 요청마다 | 4-6초 |
중요한 점: 이 숫자는 2024년 테스트 결과입니다. 마켓플레이스는 지속적으로 보호를 업데이트하므로 보수적인 설정(요청 수 감소, 지연 증가)으로 시작하고 차단 비율을 모니터링하며 점차 부하를 증가시키는 것이 좋습니다.
스마트 회전 전략
고정 간격 대신 서버 응답에 기반한 적응형 회전을 사용하십시오:
- HTTP 429 (요청이 너무 많음) — 즉시 IP 변경 및 해당 IP를 30-60분 동안 블랙리스트에 추가합니다.
- HTTP 403 (금지됨) 또는 CAPTCHA — IP 변경 및 요청 간의 지연을 50% 증가시킵니다.
- HTTP 503 (서비스 사용 불가) — 문제는 프록시에 있지 않고 사이트 과부하일 수 있습니다. IP 변경 없이 30-60초 동안 일시 중지합니다.
- 연속 성공 요청 > 100 — 지연을 약간 줄이거나 회전 전 요청 수를 늘릴 수 있습니다.
이 논리는 파서 코드에 구현되어 불필요한 회전을 피하면서 프록시 트래픽을 30-40%까지 절약할 수 있습니다.
Wildberries, Ozon 및 Yandex.Market의 안티봇 시스템 우회
현대 마켓플레이스는 간단한 User-Agent 검사부터 고급 브라우저 지문 인식까지 다단계 보호를 사용합니다. 단순한 프록시만으로는 부족하며, 포괄적인 우회 전략이 필요합니다.
1단계: 올바른 HTTP 헤더
파서가 전송해야 하는 최소한의 헤더 세트:
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/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Cache-Control: max-age=0
중요한 점:
- User-Agent는 실제 브라우저와 일치해야 합니다. 최신 Chrome 120+, Firefox 121+ 버전을 사용하십시오. 오래된 버전(Chrome 90)은 빨간 깃발입니다.
- Accept-Language는 러시아 플랫폼의 경우 "ru-RU"여야 합니다. "en-US" 헤더로 파싱하면 사이트는 불일치를 인식합니다(IP는 러시아에서 오지만 언어는 영어입니다).
- Sec-Fetch-* 헤더는 Chrome 76+에서 등장했으며 현대 사이트에 필수적입니다. 이들의 부재는 오래된 파서를 드러냅니다.
2단계: JavaScript 실행
Wildberries와 Ozon은 페이지 로드 후 JavaScript를 통해 가격, 특성 및 재고를 로드합니다. requests/curl을 사용하는 파서가 HTML을 단순히 다운로드하면 빈 페이지 또는 더미 페이지를 받게 됩니다.
해결책: 헤드리스 브라우저를 사용하십시오 — Puppeteer (Node.js), Playwright (Python/Node.js), Selenium. 이들은 페이지를 완전히 렌더링하고 JS를 실행하여 최종 HTML을 가져옵니다.
헤드리스 브라우저의 문제: 사이트는 navigator.webdriver === true와 같은 매개변수, 플러그인 부재, Canvas의 특정 크기를 통해 쉽게 식별합니다. 헤드리스 Chrome의 식별 비율은 약 80-90%입니다.
문제 해결: 스텔스 모드를 위한 라이브러리를 사용하십시오:
- puppeteer-extra-plugin-stealth (Node.js) — Puppeteer를 일반 Chrome처럼 위장하고 30개 이상의 지문 매개변수를 패치합니다.
- undetected-chromedriver (Python) — 대부분의 안티봇 시스템이 식별하지 않는 패치된 Selenium ChromeDriver 버전입니다.
- playwright-stealth (Python) — Firefox 및 WebKit을 지원하는 Playwright의 유사 버전입니다.
3단계: Cloudflare 및 DataDome 우회
Wildberries는 Cloudflare Bot Management를 사용하고 Ozon은 DataDome을 사용합니다. 이러한 시스템은 IP 및 헤더뿐만 아니라 행동도 분석합니다: 스크롤 속도, 마우스 움직임, 페이지 로드 시간.
Cloudflare Challenge의 징후: 콘텐츠 대신 "브라우저 확인 중..." 페이지가 5초 지연으로 나타납니다. 코드에서 이는 브라우저를 확인하는 JavaScript 챌린지입니다.
우회 방법:
- FlareSolverr — Cloudflare Challenge를 자동으로 해결하는 프록시 서비스입니다. URL을 보내면 우회를 위한 쿠키를 반환합니다. 70-80%의 경우에 작동합니다.
- Playwright 대기 — 헤드리스 브라우저에서 페이지를 로드하고 10-15초 동안 대기한 후(JS가 실행될 때까지) 쿠키를 추출하여 일반 HTTP 요청에서 사용합니다. 리소스를 절약합니다: 브라우저는 쿠키를 얻기 위해서만 필요하며, 이후에는 requests를 통해 파싱합니다.
- 주거용 프록시 + 스텔스 브라우저 — 이 조합은 95% 이상의 성공적인 우회를 제공합니다. Cloudflare는 실제 사용자 IP와 올바른 브라우저 지문을 확인합니다.
중요: Cloudflare는 지속적으로 보호를 업데이트합니다. 2024년 12월에 작동했던 것이 2025년 3월에는 작동하지 않을 수 있습니다. 항상 백업 계획을 마련하십시오: 2Captcha/AntiCaptcha 서비스를 통한 수동 CAPTCHA 해결 또는 마켓플레이스 API 전환(가능한 경우).
4단계: 사용자 행동 모방
고급 안티봇 시스템은 행동 패턴을 추적합니다. 실제 사용자는 페이지를 스크롤하고 마우스를 움직이며 때때로 뒤로 돌아갑니다. 봇은 완벽한 2.000초 간격으로 상품 카드를 엽니다.
모방 방법:
- 지연 랜덤화 — 고정된 3초 대신
random.uniform(2.5, 5.0)를 사용하십시오. 사용자의 주의를 분산시키는 드문 긴 대기(15-30초)를 추가하십시오. - 페이지 스크롤 — Puppeteer/Playwright에서 데이터 추출 전에 스크롤을 추가하십시오:
await page.evaluate(() => window.scrollBy(0, 500)). - 마우스 움직임 — Puppeteer의 ghost-cursor 라이브러리는 커서의 현실적인 이동 경로를 생성합니다.
- 검색을 통한 전환 — 상품 카드를 URL로 직접 열지 마십시오. 먼저 홈 페이지에 들어가 검색을 수행한 후 결과에서 상품을 클릭하십시오. 이는 자연스럽게 보입니다.
프록시 지원을 위한 인기 파싱 도구
상품 특성을 파싱하기 위해 처음부터 코드를 작성할 필요는 없습니다. 프록시 지원 및 자동 보호 우회를 갖춘 시각적 인터페이스의 준비된 도구가 있습니다.
Octoparse — 코드 없는 파서
설명: Windows/Mac용 데스크탑 애플리케이션으로 시각적 파서 생성기를 제공합니다. 페이지의 요소(상품 이름, 가격, 특성)를 클릭하면 프로그램이 자동으로 추출 규칙을 생성합니다.
프록시 지원: 내장되어 있습니다. 설정에서 프록시 목록을 지정하면 프로그램이 자동으로 회전합니다. HTTP, HTTPS, SOCKS5를 지원합니다. Bright Data, Smartproxy 공급자와의 통합이 있습니다.
장점: 코드를 필요로 하지 않으며, JavaScript 사이트에서 작동하고, 내장된 작업 스케줄러, Excel/CSV/JSON으로 내보내기.
단점: 월 75달러부터 시작하는 유료 구독, Python 코드보다 느림, 무료 버전에서 페이지 수에 대한 제한.
사용 시기: 소규모 프로젝트(50,000개 이하 상품)에 적합하며, 프로그래머가 아닌 경우 또는 빠른 프로토타입이 필요한 경우.
ParseHub — 클라우드 파서
설명: Octoparse와 유사하지만 클라우드에서 작동합니다. 데스크탑 애플리케이션에서 파서를 설정하고 ParseHub 서버에서 실행됩니다. 긴 작업(100,000개 이상의 상품 파싱)에 편리합니다.
프록시 지원: 유료 요금제에서만 제공됩니다(149달러/월부터). 자신의 프록시 목록을 업로드하거나 ParseHub의 내장 주거용 IP를 사용할 수 있습니다.
장점: 컴퓨터에 부담을 주지 않으며, 페이지 매핑 자동 처리, 통합을 위한 API.
단점: 비쌈, 느린 지원, 복잡한 사이트 설정의 어려움.
Scrapy (Python) — 프로그래머용
설명: Python으로 파서를 생성하기 위한 프레임워크입니다. 가장 유연하고 빠른 옵션으로 하루에 수백만 개의 상품을 파싱할 수 있습니다. 중간 수준의 Python 지식이 필요합니다.
프록시 지원: 미들웨어를 통해. 인기 있는 솔루션: scrapy-rotating-proxies(목록에서 회전), scrapy-proxy-pool(공급자 API와 통합). 설정하는 데 10-15분이 소요됩니다.
장점: 무료이며, 매우 빠르며(비동기 요청), 로직에 대한 완전한 제어, 방대한 커뮤니티.
단점: 코드를 작성해야 하며, JavaScript 사이트에서의 어려움(통합 필요).
사용 시기: 하루에 100,000개 이상의 상품을 처리하는 심각한 프로젝트에 적합하며, 팀에 프로그래머가 있는 경우.
Apify — 준비된 파서 마켓플레이스
설명: 인기 사이트를 위한 수천 개의 준비된 파서("액터"라고 함)를 제공하는 플랫폼입니다. Amazon, eBay, AliExpress를 위한 준비된 솔루션이 있습니다. 러시아 마켓플레이스에 대한 선택은 적지만 개발을 주문할 수 있습니다.
프록시 지원: 모든 액터에 내장되어 있습니다. Apify는 자체 주거용 프록시를 제공하며(트래픽 기준 결제) 자신의 프록시를 연결할 수 있습니다.
장점: 준비된 솔루션, 클라우드 실행, 자동화를 위한 API, 내장된 프록시.
단점: 비쌈(49달러/월부터 + 프록시 비용), 플랫폼 의존성, 사용자 정의 제한.
도구 비교
| 도구 | 코드 필요? | 가격 | 속도 | 대상 |
|---|---|---|---|---|
| Octoparse | 아니요 | 75달러/월부터 | 중간 | 마케팅 담당자, 프로그래밍 없이 분석가 |
| ParseHub | 아니요 | 149달러/월부터 | 중간 | 클라우드 실행을 원하는 동일한 사용자 |
| Scrapy | 예 (Python) | 무료 | 매우 빠름 | 프로그래머, 대량 데이터 |
| Apify | 아니요 (준비된 액터) | 49달러/월부터 + 트래픽 | 높음 | 비즈니스, 준비된 솔루션이 필요한 경우 |
| Puppeteer/Playwright | 예 (JS/Python) | 무료 | 중간 (무거운 브라우저) | 프로그래머, 복잡한 JS 사이트 |
파서에서 프록시 단계별 설정
인기 도구를 예로 들어 프록시의 실제 설정을 살펴보겠습니다. 이 지침은 러시아 마켓플레이스뿐만 아니라 모든 마켓플레이스의 파싱에 적합합니다.
Octoparse에서 설정하기
1단계: Octoparse를 열고 새 파싱 작업을 만듭니다. 시작 페이지의 URL을 입력합니다(예: Wildberries의 상품 카테고리).
2단계: "Settings" → "Advanced Settings" → "Proxy" 메뉴로 이동합니다. "사용자 정의 프록시 사용"을 선택합니다.
3단계: 다음 형식으로 프록시를 추가합니다:
http://username:password@proxy-server.com:8080
socks5://username:password@proxy-server.com:1080
4단계: "Rotate proxy" 옵션을 활성화하고 회전 간격을 설정합니다. Wildberries의 경우 "50개의 요청마다 회전" 또는 "10분마다 회전"을 권장합니다.
5단계: "Test Proxy"를 클릭하십시오 — Octoparse가 각 프록시의 가용성을 확인합니다. 작동하지 않는 것을 목록에서 제거하십시오.
6단계: "Speed" 섹션에서 요청 간의 지연을 설정합니다: 주거용 프록시의 경우 2-4초, 데이터 센터의 경우 3-5초.
Scrapy (Python)에서 설정하기
1단계: 프록시 회전을 위한 라이브러리를 설치합니다:
pip install scrapy-rotating-proxies
2단계: 프록시 목록이 포함된 proxies.txt 파일을 생성합니다(각 줄에 하나씩):
http://user:pass@1.2.3.4:8080
http://user:pass@5.6.7.8:8080
socks5://user:pass@9.10.11.12:1080
3단계: Scrapy 프로젝트의 settings.py 파일에 다음을 추가합니다:
ROTATING_PROXY_LIST_PATH = 'proxies.txt'
DOWNLOADER_MIDDLEWARES = {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
# 요청 간의 지연(초 단위)
DOWNLOAD_DELAY = 3
# 지연 랜덤화 (±50%)
RANDOMIZE_DOWNLOAD_DELAY = True
# 동시 요청 (주거용 프록시의 경우 16개 이하)
CONCURRENT_REQUESTS = 8
4단계: Scrapy는 각 요청 시 자동으로 프록시를 회전합니다. 프록시가 오류(HTTP 403, 429, 타임아웃)를 반환하면 "나쁜" 것으로 표시되고 회전에서 일시적으로 제외됩니다.
Puppeteer (Node.js)에서 설정하기
1단계: Puppeteer 및 스텔스 모드 플러그인을 설치합니다:
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
2단계: 프록시 지원 스크립트를 생성합니다:
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const proxyList = [
'http://user:pass@proxy1.com:8080',
'http://user:pass@proxy2.com:8080'
];
let currentProxyIndex = 0;
async function scrapeWithProxy(url) {
const proxy = proxyList[currentProxyIndex];
currentProxyIndex = (currentProxyIndex + 1) % proxyList.length;
const browser = await puppeteer.launch({
headless: true,
args: [`--proxy-server=${proxy}`]
});
const page = await browser.newPage();
// 프록시 인증 (필요한 경우)
await page.authenticate({
username: 'user',
password: 'pass'
});
await page.goto(url, { waitUntil: 'networkidle2' });
// 데이터 추출
const data = await page.evaluate(() => {
return {
title: document.querySelector('.product-title')?.innerText,
price: document.querySelector('.product-price')?.innerText,
};
});
await browser.close();
return data;
}
이 스크립트는 주어진 URL을 파싱하기 위해 프록시를 사용하여 Puppeteer를 설정하는 방법을 보여줍니다.