2026년 Pydoll을 활용한 웹 스크래핑: 단계별 가이드

자바스크립트 중심 웹사이트 스크래핑을 위한 Pydoll 활용법, Cloudflare 우회 방법, Bright Data 같은 회전 프록시 기반 확장 전략을 익히세요.
5 분 읽기
Web Scraping With Pydoll blog image

이 가이드에서 배우게 될 내용:

  • Pydoll의 정의 및 제공 기능
  • 자바스크립트 기반 웹사이트 스크래핑 방법
  • Cloudflare 보호 우회 방법
  • 주요 제한 사항
  • 회전 프록시 통합을 통해 이러한 한계를 극복하는 방법
  • 파이돌을 대체할 수 있는 최고의 파이썬 기반 대안들

자, 시작해 보겠습니다!

Pydoll 소개

Pydoll이 무엇이며, 어떻게 작동하며, Python 웹 스크래핑 라이브러리로서 무엇을 제공하는지 알아보세요.

Pydoll이란?

Pydoll은 웹 스크래핑, 테스트, 반복 작업 자동화를 위해 개발된 파이썬 브라우저 자동화 라이브러리입니다. 기존 웹 드라이버가 필요 없다는 점이 차별점입니다. 구체적으로 DevTools Protocol을 통해 브라우저에 직접 연결되므로 외부 의존성이 필요하지 않습니다.

Pydoll의 첫 안정 버전인 1.0은 2026년 2월에 출시되었습니다. 이는 웹 스크래핑 분야에서 비교적 새로운 플레이어임을 의미합니다. 그럼에도 불구하고 이미 강력한 성장세를 보이며 GitHub에서 3,000개 이상의 스타를 획득했습니다:

The pydoll GitHub star history

보시다시피, 이 라이브러리는 Python 웹 스크래핑 커뮤니티에서 큰 인기를 얻고 있습니다.

주요 기능

Pydoll이 제공하는 주요 기능 요약은 다음과 같습니다:

  • 웹 드라이버 불필요: 브라우저 드라이버 의존성을 제거하여 버전 불일치 문제를 줄이고 크로미움 기반 자동화 설정을 간소화합니다.
  • 비동기 우선 아키텍처: 높은 동시성, 효율적인 메모리 사용, 현대적인 파이썬 개발 패턴을 위해 완전히 asyncio 기반으로 구축되었습니다.
  • 인간과 유사한 상호작용: 현실적인 타이핑, 마우스 움직임, 클릭을 모방하여 자동화 중 봇 탐지를 줄입니다.
  • 이벤트 기반 기능: 브라우저, DOM, 네트워크 및 라이프사이클 이벤트에 실시간으로 반응하여 반응형 자동화를 가능하게 합니다.
  • 다중 브라우저 지원: 동일한 통합 인터페이스로 Chrome, Edge 및 기타 크로미움 기반 브라우저와 호환됩니다.
  • 스크린샷 및 PDF 내보내기: 전체 페이지, 특정 요소 캡처 또는 로드된 모든 웹페이지에서 고품질 PDF 생성.
  • 네이티브 Cloudflare 우회: 타사 서비스 없이 Cloudflare 안티봇을 자동으로 우회하며, IP 평판이 높을 때 신뢰할 수 있는 브라우저 세션을 모방합니다.
  • 동시 스크래핑: 여러 페이지 또는 웹사이트를 병렬로 스크래핑하여 총 실행 시간을 획기적으로 단축합니다.
  • 고급 키보드 제어: 타이밍, 수정자 및 특수 키 처리를 정밀하게 제어하여 실제 사용자의 타이핑을 시뮬레이션합니다.
  • 강력한 이벤트 시스템: 네트워크 요청, 페이지 로드 및 사용자 지정 브라우저 이벤트를 실시간으로 모니터링하고 처리합니다.
  • 파일 업로드 지원: 직접 입력 및 대화형 파일 선택기 대화 상자를 사용하여 파일 업로드를 자동화합니다.
  • 프록시 통합: 스크래핑 중 IP 로테이션, 지리적 타겟팅 또는 속도 제한 회피를 위한 프록시 사용을 지원합니다.
  • 요청 차단: 고급 자동화 및 스크래핑 제어를 위해 HTTP 요청 및 응답을 차단, 수정 또는 차단합니다.

자세한 내용은 공식 문서를 참조하세요.

웹 스크래핑을 위한 Pydoll 사용: 완전한 튜토리얼

이 튜토리얼 섹션에서는 비동기식 JavaScript 기반 “Quotes to Scrape” 페이지에서 데이터를 스크래핑하는 방법을 Pydoll을 통해 배웁니다:

The target site loading the data after 2 seconds

이 페이지는 짧은 지연 후 JavaScript를 사용하여 인용문 요소를 동적으로 렌더링합니다. 따라서 기존 스크래핑 도구는 바로 작동하지 않습니다. 해당 페이지의 콘텐츠를 추출하려면 Pydoll과 같은 브라우저 자동화 도구가 필요합니다.

아래 단계를 따라 “Quotes to Scrape”에서 인용문 데이터를 동적으로 추출하는 Pydoll 웹 스크레이퍼를 구축하세요.

단계 #1: 프로젝트 설정

시작하기 전에 컴퓨터에 Python 3 이상이 설치되어 있는지 확인하세요. 설치되어 있지 않다면 다운로드하여 설치 안내를 따르세요.

그런 다음 스크래핑 프로젝트용 폴더를 생성하기 위해 다음 명령어를 실행하세요:

mkdir pydoll-scraper

pydoll-scraper 디렉터리가 프로젝트 폴더 역할을 합니다.

터미널에서 해당 폴더로 이동한 후 내부에서 Python 가상 환경을 초기화하세요:

cd pydoll-scraper
python -m venv venv

선호하는 Python IDE에서 프로젝트 폴더를 로드하세요. Python 확장 기능이 설치된 Visual Studio Code나 PyCharm Community Edition을 사용하면 됩니다.

프로젝트 폴더 내에 scraper.py 파일을 생성합니다. 현재 이 파일에는 다음 내용이 포함되어야 합니다:

The project file structure for web scraping with Pydoll

현재 scraper.py는 빈 Python 스크립트입니다. 곧 데이터 파싱 로직이 포함될 예정입니다.

다음으로 IDE 터미널에서 가상 환경을 활성화하세요. Linux 또는 macOS에서는 다음 명령을 실행합니다:

source venv/bin/activate

Windows에서는 다음과 같이 실행하세요:

venv/Scripts/activate

훌륭합니다! 이제 Pydoll을 사용한 웹 스크래핑을 위한 Python 환경이 설정되었습니다.

2단계: Pydoll 설정

활성화된 가상 환경에서 pydoll-python 패키지를 통해 Pydoll을 설치하세요:

pip install pydoll-python

이제 Pydoll을 시작하기 위해 아래 로직을 scraper.py 파일에 추가하세요:

import asyncio
from pydoll.browser.chrome import Chrome

async def main():
    async with Chrome() as browser:
        # Chrome 브라우저 실행 및 새 페이지 열기
        await browser.start()
        page = await browser.get_page()

        # 스크래핑 로직...

# 비동기 스크래핑 함수 실행
asyncio.run(main())

Pydoll은 웹 스크래핑을 위한 비동기 API를 제공하며 Python의 asyncio 표준 라이브러리 사용이 필요합니다.

좋습니다! 이제 기본적인 Pydoll 스크립트가 준비되었습니다.

3단계: 대상 사이트에 연결하기

페이지 객체가 제공하는 go_to() 메서드를 호출하여 대상 사이트로 이동합니다:

await page.go_to("https://quotes.toscrape.com/js-delayed/?delay=2000")

?delay=2000 쿼리 매개변수는 2초 지연 후 원하는 데이터를 동적으로 로드하도록 페이지에 지시합니다. 이는 동적 스크래핑 동작 테스트를 돕기 위해 설계된 대상 샌드박스 사이트의 기능입니다.

이제 위 스크립트를 실행해 보세요. 모든 것이 정상적으로 작동한다면 Pydoll은 다음과 같은 작업을 수행할 것입니다:

  1. Chrome 인스턴스 실행
  2. 대상 사이트로 이동
  3. 스크립트에 추가 로직이 아직 없으므로 즉시 브라우저 창을 닫음

구체적으로, 창이 닫히기 전에 다음과 같은 내용을 확인할 수 있어야 합니다:

The target page being loaded by the Chrome instance controlled by Pydoll

완벽합니다! 이제 대기 로직을 추가할 준비가 되었습니다.

단계 #4: HTML 요소가 나타날 때까지 대기

이전 단계의 마지막 이미지를 살펴보세요. 이는 Chrome 인스턴스에서 Pydoll이 제어하는 페이지의 콘텐츠를 나타냅니다. 데이터가 전혀 로드되지 않아 완전히 비어 있음을 확인할 수 있습니다.

이유는 대상 사이트가 2초 지연 후 데이터를 동적으로 렌더링하기 때문입니다. 이 지연 시간은 예시 사이트에 특화된 것이지만, 페이지 렌더링을 기다려야 하는 상황은 AJAX에 의존하는 SPA(단일 페이지 애플리케이션) 및 기타 동적 웹사이트를 스크래핑할 때 흔히 발생하는 시나리오입니다.

자세한 내용은 Python으로 동적 웹사이트 스크래핑하기 문서를 참고하세요.

이러한 일반적인 시나리오를 처리하기 위해 Pydoll은 다음 메서드를 통해 내장 대기 메커니즘을 제공합니다:

  • wait_element(): 단일 요소가 나타날 때까지 대기(타임아웃 지원)

위 메서드는 CSS 선택자, XPath 표현식 등을 지원하며, Selenium의 By 객체와 유사하게 작동합니다.

이제 대상 페이지의 HTML을 살펴볼 차례입니다. 브라우저에서 페이지를 열고, 명언이 로드될 때까지 기다린 후, 명언 중 하나를 마우스 오른쪽 버튼으로 클릭하고 “검사” 옵션을 선택하세요:

The HTML of the quote elements

개발자 도구 패널에서 각 명언이 class= "quote" 속성을 가진 <div> 태그로 감싸져 있음을 확인할 수 있습니다. 즉, CSS 선택자를 사용하여 다음과 같이 명언을 타겟팅할 수 있습니다:

.quote

이제 Pydoll을 사용하여 이 요소들이 나타나기를 기다린 후 진행하세요:

await page.wait_element(By.CSS_SELECTOR, ".quote", timeout=3)

By를 반드시 임포트하세요:

from pydoll.constants import By

스크립트를 다시 실행하면, 이번에는 Pydoll이 브라우저를 닫기 전에 인용문 요소가 로드되기를 기다리는 것을 확인할 수 있습니다. 잘하셨습니다!

5단계: 웹 스크래핑 준비

대상 페이지에는 하나의 인용문만 있는 것이 아닙니다. 모든 인용문을 스크래핑하려면 해당 데이터를 저장할 데이터 구조가 필요합니다. 간단한 배열이 완벽하게 작동하므로 하나를 초기화하세요:

quotes = []

페이지에서 요소를 찾기 위해 Pydoll은 두 가지 편리한 메서드를 제공합니다:

  • find_element(): 첫 번째 일치하는 요소 찾기
  • find_elements(): 일치하는 모든 요소를 찾습니다

wait_element()와 마찬가지로, 이 메서드들은 By 객체를 사용한 선택자를 받아들입니다.

따라서 페이지의 모든 인용문 요소를 선택하려면 다음을 사용하세요:

quote_elements = await page.find_elements(By.CSS_SELECTOR, ".quote")

다음으로, 요소를 순회하며 스크래핑 로직을 적용할 준비를 합니다:

for quote_element in quote_elements:
  # 스크래핑 로직...

훌륭합니다! 이제 데이터 추출 로직을 진행할 차례입니다.

6단계: 데이터 파싱 로직 구현

먼저 단일 인용문 요소를 검사해 봅시다:

The HTML of a quote element

위 HTML에서 알 수 있듯이, 단일 인용문 요소에는 다음이 포함됩니다:

  • .text 노드에 포함된 텍스트 quote
  • .author 요소에 포함된 저자 정보
  • .tag 요소 내의 태그 목록

해당 요소들을 선택하고 관심 데이터를 추출하는 스크래핑 로직을 구현하세요:

# 인용문 텍스트 추출 (그리고 곡선 따옴표 제거)
text_element = await quote_element.find_element(By.CSS_SELECTOR, ".text")
text = (await text_element.get_element_text()).replace("“", "").replace("”", "")

# 저자 이름 추출
author_element = await quote_element.find_element(By.CSS_SELECTOR, ".author")
author = await author_element.get_element_text()

# 관련 태그 모두 추출
tag_elements = await quote_element.find_elements(By.CSS_SELECTOR, ".tag")
tags = [await tag_element.get_element_text() for tag_element in tag_elements]

참고: replace() 메서드는 추출된 인용문 텍스트에서 불필요한 중괄호(“)를 제거합니다.

이제 스크랩한 데이터를 활용하여 새 사전 객체를 생성하고 인용문 배열에 추가합니다:

# 스크랩된 데이터로 새 인용문 생성
quote = {
    "text": text,
    "author": author,
    "tags": tags
}
# 추출된 인용문을 목록에 추가
quotes.append(quote)

잘하셨습니다! 이제 스크랩한 데이터를 CSV로 내보내기만 하면 됩니다.

7단계: CSV로 내보내기

현재 스크랩된 데이터는 Python 리스트에 저장되어 있습니다. CSV와 같은 사람이 읽을 수 있는 형식으로 내보내 다른 사람과 공유하고 탐색하기 쉽게 만듭니다.

Python을 사용하여 quotes.csv 라는 새 파일을 생성하고 스크랩한 데이터로 채웁니다:

with open("quotes.csv", "w", newline="", encoding="utf-8") as csvfile:
            # 헤더 추가
            fieldnames = ["text", "author", "tags"]
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

            # 스크랩한 데이터로 출력 파일 채우기
            writer.writeheader()
            for quote in quotes:
                writer.writerow(quote)

Python 표준 라이브러리에서 csv를 임포트하는 것을 잊지 마세요:

import csv

미션 완료! Pydoll 스크레이퍼 실행 준비 완료.

8단계: 모든 것을 합치기

scraper.py 파일은 이제 다음과 같아야 합니다:

import asyncio
from pydoll.browser.chrome import Chrome
from pydoll.constants import By
import csv

async def main():
    async with Chrome() as browser:
        # Chrome 브라우저 실행 및 새 페이지 열기
        await browser.start()
        page = await browser.get_page()

        # 대상 페이지로 이동
        await page.go_to("https://quotes.toscrape.com/js-delayed/?delay=2000")

        # 인용문 요소가 나타날 때까지 최대 3초 대기
        await page.wait_element(By.CSS_SELECTOR, ".quote", timeout=3)

        # 스크랩한 데이터 저장 위치
        quotes = []

        # 모든 인용문 요소 선택
        quote_elements = await page.find_elements(By.CSS_SELECTOR, ".quote")

        # 요소 반복 처리 및 데이터 스크랩
        for quote_element in quote_elements:
            # 인용문 텍스트 추출 (그리고 곡선 따옴표 제거)
            text_element = await quote_element.find_element(By.CSS_SELECTOR, ".text")
            text = (await text_element.get_element_text()).replace("“", "").replace("”", "")

            # 저자 추출
            author_element = await quote_element.find_element(By.CSS_SELECTOR, ".author")
            author = await author_element.get_element_text()

            # 모든 태그 추출
            tag_elements = await quote_element.find_elements(By.CSS_SELECTOR, ".tag")
            tags = [await tag_element.get_element_text() for tag_element in tag_elements]

            # 추출된 데이터로 새 인용문 생성
            quote = {
                "text": text,
                "author": author,
                "tags": tags
            }
            # 추출된 인용문을 목록에 추가
            quotes.append(quote)

    # 스크랩한 데이터를 CSV로 내보내기
    with open("quotes.csv", "w", newline="", encoding="utf-8") as csvfile:
                # 헤더 추가
                fieldnames = ["text", "author", "tags"]
                writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

                # 스크랩한 데이터로 출력 파일 채우기
                writer.writeheader()
                for quote in quotes:
                    writer.writerow(quote)

# 비동기 스크래핑 함수 실행
asyncio.run(main())

와! 60줄도 안 되는 코드로 Pydoll을 사용해 웹 스크래핑 봇을 만들 수 있습니다.

다음 명령어로 위 스크립트를 테스트하세요:

python scraper.py

실행이 완료되면 프로젝트 폴더에 quotes.csv 파일이 생성됩니다. 파일을 열면 깔끔하게 정리된 스크래핑 데이터를 확인할 수 있습니다:

The output data in quotes.csv

자, 이제 Pydoll 웹 스크래핑 스크립트가 예상대로 작동합니다.

Pydoll로 Cloudflare 우회하기

브라우저 자동화 도구로 사이트와 상호작용할 때 가장 큰 과제 중 하나는 웹 애플리케이션 방화벽(WAF)입니다. Cloudflare 같은 솔루션은 일반적으로 고급 봇 방지 기능을 제공합니다.

자동화된 브라우저에서 요청이 온 것으로 의심될 때, 이러한 시스템은 일반적으로 CAPTCHA를 표시합니다. 경우에 따라 사이트 첫 방문 시 모든 사용자에게 이를 제시하기도 합니다.

파이썬으로 CAPTCHA를 우회하는 것은 결코 쉬운 일이 아닙니다. 하지만 Cloudflare가 사용자를 실제 사용자로 인식하도록 속여 처음부터 CAPTCHA를 표시하지 않게 할 방법이 있습니다. 바로 Pydoll이 등장하는 지점인데, 이 도구는 바로 그 목적을 위한 전용 API를 제공합니다.

작동 방식을 보여주기 위해 ScrapingCourse 사이트의 “Antibot Challenge” 테스트 페이지를 사용해 보겠습니다:

Automatic Cloudflare verification on the target page

보시다시피, 이 페이지는 항상 Cloudflare JavaScript Challenge를 수행합니다. 이를 우회하면, 안티봇 보호 기능이 무력화되었음을 확인하기 위한 샘플 콘텐츠가 표시됩니다.

Pydoll은 Cloudflare 처리를 위해 두 가지 접근 방식을 제공합니다:

  1. 컨텍스트 매니저 방식: 봇 방지 도전을 동기식으로 처리하며, 도전이 해결될 때까지 스크립트 실행을 일시 중지합니다.
  2. 백그라운드 처리 방식: 봇 방지 기능을 백그라운드에서 비동기적으로 처리합니다.

두 방법 모두 다룰 예정입니다. 다만 공식 문서에서 언급된 바와 같이, Cloudflare 우회가 항상 성공하지는 않을 수 있다는 점을 유념하세요. 이는 IP 평판이나 탐색 기록 같은 문제 때문입니다.

더 고급 기법은 Cloudflare로 보호된 사이트 스크래핑에 관한 전체 튜토리얼을 참고하세요.

컨텍스트 매니저 접근법

Pydoll이 Cloudflare 안티봇 챌린지를 자동으로 처리하도록 하려면 expect_and_bypass_cloudflare_captcha() 메서드를 다음과 같이 사용하세요:

import asyncio
from pydoll.browser.chrome import Chrome
from pydoll.constants import By

async def main():
    async with Chrome() as browser:
        # Chrome 브라우저 실행 및 새 페이지 열기
        await browser.start()
        page = await browser.get_page()

        # Cloudflare 챌린지 실행 대기
        async with page.expect_and_bypass_cloudflare_captcha():
            # Cloudflare 보호 페이지 접속:
            await page.go_to("https://www.scrapingcourse.com/antibot-challenge")
            print("Cloudflare 안티봇 처리 대기 중...")

        # 이 코드는 안티봇 우회 성공 후에만 실행됨
        print("Cloudflare 안티봇 우회 완료! 자동화 계속 진행...")

        # 성공 페이지의 텍스트 메시지 출력
        await page.wait_element(By.CSS_SELECTOR, "#challenge-title", timeout=3)
        success_element = await page.find_element(By.CSS_SELECTOR, "#challenge-title")
        success_text = await success_element.get_element_text()
        print(success_text)

asyncio.run(main())

이 스크립트를 실행하면 Chrome 창이 자동으로 인증 절차를 건너뛰고 대상 페이지를 로드합니다.

출력 결과는 다음과 같습니다:

Cloudflare 안티봇 처리 대기 중...
Cloudflare 안티봇 우회 성공! 자동화 진행...
안티봇 챌린지를 우회했습니다! 😀

백그라운드 처리 방식

Pydoll이 Cloudflare 챌린지를 처리하는 동안 스크립트 실행을 차단하지 않으려면 enable_auto_solve_cloudflare_captcha()disable_auto_solve_cloudflare_captcha() 메서드를 다음과 같이 사용할 수 있습니다:

import asyncio
from pydoll.browser import Chrome
from pydoll.constants import By

async def main():
    async with Chrome() as browser:
        # Chrome 브라우저 실행 및 새 페이지 열기
        await browser.start()
        page = await browser.get_page()

        # 이동 전 자동 캡차 해결 활성화
        await page.enable_auto_solve_cloudflare_captcha()

        # Cloudflare로 보호된 페이지에 접속:
        await page.go_to("https://www.scrapingcourse.com/antibot-challenge")
        print("페이지 로드 완료, Cloudflare 안티봇 처리 중...")

        # 더 이상 필요하지 않을 때 안티봇 자동 해결 비활성화
        await page.disable_auto_solve_cloudflare_captcha()

        # 성공 페이지의 텍스트 메시지 출력
        await page.wait_element(By.CSS_SELECTOR, "#challenge-title", timeout=3)
        success_element = await page.find_element(By.CSS_SELECTOR, "#challenge-title")
        success_text = await success_element.get_element_text()
        print(success_text)

asyncio.run(main())

이 접근 방식은 Pydoll이 백그라운드에서 Cloudflare 안티봇 챌린지를 해결하는 동안 스크레이퍼가 다른 작업을 수행할 수 있게 합니다.

이번에는 출력이 다음과 같습니다:

페이지 로드 완료, Cloudflare 안티봇 처리 중...
안티봇 챌린지를 우회했습니다! 😀

웹 스크래핑에 대한 이 접근법의 한계

Pydoll을 비롯한 모든 스크래핑 도구는요청을 너무 많이 보내면 대상 서버에 차단될 가능성이 높습니다. 대부분의 웹사이트는 스크래핑 스크립트 같은 봇이 서버를 요청으로 압도하는 것을 방지하기 위해 속도 제한(rate limiting)을 구현하기 때문입니다.

이는 일반적인 스크래핑 방지 및 DDoS 방지 기술입니다. 결국, 자동화된 트래픽으로 사이트가 마비되는 것을 원하는 사람은 아무도 없으니까요.

robots.txt를 준수하는 등 모범 사례를 따르고 있더라도 동일한 IP 주소에서 많은 요청을 보내면 여전히 의심을 살 수 있습니다. 결과적으로 403 Forbidden 또는 429 Too Many Requests 오류가 발생할 수 있습니다.

이를 피하는 가장 좋은 방법은 웹 프록시를 사용하여 IP 주소를 순환시키는 것입니다.

웹 프록시가 익숙하지 않다면, 스크레이퍼와 대상 웹사이트 사이의 중개자 역할을 한다고 생각하면 됩니다. 프록시는 사용자의 요청을 전달하고 응답을 반환하여, 대상 사이트에 트래픽이 실제 기기가 아닌 프록시에서 오는 것처럼 보이게 합니다.

이 기술은 실제 IP를 숨기는 데 도움이 될 뿐만 아니라, 지역 제한을 우회하고 다른 여러 용도로도 유용합니다.

현재 여러 유형의 프록시가 존재합니다. 차단되지 않으려면 Bright Data와 같이 진정한 회전 프록시를 제공하는 고품질 공급자가 필요합니다.

다음 섹션에서는 Bright Data의 로테이팅 프록시를 Pydoll과 통합하여 웹 페이지를 보다 효과적으로, 특히 대규모로 스크래핑하는 방법을 살펴보겠습니다.

Pydoll과 Bright Data의 로테이팅 프록시 통합

Bright Data는 포춘 500대 기업 및 20,000명 이상의 고객이 신뢰하는 세계 최대 규모의 프록시 네트워크 중 하나를 운영합니다. 해당 프록시 네트워크에는 다음이 포함됩니다:

아래 단계를 따라 Pydoll에서 Bright Data의 주거용 프록시를 사용하는 방법을 알아보세요.

아직 계정이 없다면 Bright Data에 가입하세요. 이미 계정이 있다면 로그인하여 대시보드로 이동하세요:

The Bright Data dashboard

대시보드에서 “프록시 제품 받기” 버튼을 클릭하세요:

“프록시 및 스크래핑 인프라” 페이지로 이동합니다:

The “Proxies & Scraping Infrastructure” page

표에서 “주거용(Residential)” 행을 찾아 클릭하세요:

Clicking the “residential” row

주거용 프록시 설정 페이지로 이동합니다:

The “residential” page

처음 이용하시는 경우, 설정 마법사를 따라 필요에 맞게 프록시를 구성하세요. 도움이 필요하시면 연중무휴 24시간 지원팀에 문의하십시오.

“개요” 탭으로 이동하여 프록시의 호스트, 포트, 사용자 이름, 비밀번호를 확인하세요:

The proxy credentials

해당 정보를 사용하여 프록시 URL을 생성하세요:

proxy_url = "<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>";

자리 표시자(<brightdata_proxy_username>, <brightdata_proxy_password>, <brightdata_proxy_host>, <brightdata_proxy_port>)를 실제 프록시 자격 증명으로 대체하세요.

스위치를 “Off”에서 “On”으로 전환하여 프록시 제품을 활성화하세요:

Clicking the activation toggle

이제 프록시 설정이 완료되었으므로, Pydoll의 내장 프록시 구성 기능을 사용하여 통합하는 방법은 다음과 같습니다:

import asyncio
from pydoll.browser.chrome import Chrome
from pydoll.browser.options import Options
from pydoll.constants import By
import traceback

async def main():
    # 브라우저 옵션 생성
    options = Options()

    # Bright Data 프록시 URL
    proxy_url = "<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>" # 본인의 프록시 URL로 대체

    # 프록시 통합 옵션 구성
    options.add_argument(f"--proxy-server={proxy_url}")

    # 잠재적인 SSL 오류 방지
    options.add_argument("--ignore-certificate-errors")

    # 프록시 설정으로 브라우저 시작
    async with Chrome(options=options) as browser:
        await browser.start()
        page = await browser.get_page()

        # 호출자의 IP를 반환하는 특수 페이지 방문
        await page.go_to("https://httpbin.io/ip")

        # 들어오는 요청의 IP만 포함된 페이지 콘텐츠 추출
        # 요청의 IP 주소만 포함된 페이지 콘텐츠 추출 및 출력
        body_element = await page.find_element(By.CSS_SELECTOR, "body")
        body_text = await body_element.get_element_text()
        print(f"현재 IP 주소: {body_text}")

# 비동기 스크래핑 함수 실행
asyncio.run(main())

이 스크립트를 실행할 때마다 Bright Data의 프록시 로테이션 덕분에 다른 출구 IP 주소를 확인할 수 있습니다.

참고: 일반적으로 Chrome의 --proxy-server 플래그는 기본적으로 인증된 프록시를 지원하지 않습니다. 그러나 Pydoll의 고급 프록시 관리자는 이러한 제한을 우회하여 비밀번호로 보호된 프록시 서버를 사용할 수 있게 합니다.

Bright Data의 회전 프록시를 사용하면 Pydoll 프록시 회전이 간단하고 안정적이며 확장 가능합니다!

웹 스크래핑을 위한 Pydoll 대안

Pydoll은 특히 내장된 봇 방지 우회 기능을 갖춘 브라우저 자동화에 있어 강력한 웹 스크래핑 라이브러리임이 분명합니다. 하지만 유일한 도구는 아닙니다.

다음은 고려해볼 만한 몇 가지 견고한 Pydoll 대안입니다:

  • SeleniumBase: Selenium/WebDriver API를 기반으로 구축된 Python 프레임워크로, 웹 자동화를 위한 전문가 수준의 툴킷을 제공합니다. 엔드투엔드 테스트부터 고급 스크래핑 워크플로우까지 모든 것을 지원합니다.
  • Undetected ChromeDriver: Imperva, DataDome, Distil Networks와 같은 주요 안티봇 서비스의 탐지를 회피하도록 설계된 ChromeDriver의 패치 버전입니다. Selenium 사용 시 은밀한 스크래핑에 이상적입니다.

모든 웹사이트에서 작동하며 여러 프로그래밍 언어를 지원하는 보다 범용적인 웹 스크래핑 솔루션을 원하신다면, 당사의 스크래핑 서비스를 확인해 보세요:

  • 스크래핑 브라우저: Selenium, Playwright, Puppeteer와 호환되며 내장된 잠금 해제 기능을 갖춘 브라우저입니다.
  • 웹 스크레이퍼 API: 100개 이상의 주요 도메인에서 구조화된 데이터를 추출하기 위한 사전 구성된 API입니다.
  • 웹 언락커: 봇 방지 기능이 적용된 사이트의 잠금 해제를 처리하는 올인원 API입니다.
  • SERP API: 검색 엔진 결과를 잠금 해제하고 완전한 SERP 데이터를 추출하는 전문 API.

결론

이 프록시 통합 튜토리얼에서는 Pydoll이 무엇이며 어떻게 작동하는지 배웠습니다. 자바스크립트 기반 웹사이트에서 웹 스크래핑을 위해 이를 사용하는 방법을 살펴보고, 프록시 통합을 통해 주요
제한 사항을 프록시 통합을 통해 해결하는 방법을 살펴보았습니다.

또한 IP 로테이션 메커니즘 없이 Pydoll을 사용하면 결과가 불안정해질 수 있는 이유도 이해하셨을 것입니다. 안정적인 성능, 향상된 보안 및 확장성을 위해서는 신뢰할 수 있는 프록시 공급자를 선택해야 합니다. 시장에서 최고의 프록시 공급자인 Bright Data를 바로 이용하면 시간과 노력을 절약할 수 있습니다.

지금 바로 계정을 생성하고 저희 프록시를 무료로 테스트해 보세요!