Python에서 Playwright를 사용하여 웹 스크래핑을 수행하는 방법을 단계별로 설명하겠습니다. Playwright는 강력한 웹 자동화 도구로, 다양한 브라우저를 지원하며 빠르고 안정적인 스크래핑을 할 수 있게 해줍니다.
1. Playwright 설치
먼저 Playwright를 설치해야 합니다. Python 환경에서 아래 명령어를 실행하세요:
pip install playwright
설치 후 브라우저 이진 파일을 다운로드해야 합니다.
playwright install
2. Playwright 기본 사용법
Playwright를 사용하여 웹 페이지를 열고 데이터를 스크래핑하는 기본 예제를 보여드리겠습니다.
from playwright.sync_api import sync_playwright
# Playwright 실행
with sync_playwright() as p:
# 브라우저를 엽니다 (크롬, 파이어폭스, 웹킷 중 하나 선택 가능)
browser = p.chromium.launch(headless=False) # headless=False로 설정하면 브라우저가 보이게 됩니다.
# 새 페이지를 엽니다
page = browser.new_page()
# 스크랩할 웹사이트로 이동합니다
page.goto('https://example.com')
# 페이지의 제목을 가져옵니다
title = page.title()
print(f"Page title: {title}")
# 특정 요소의 텍스트를 가져옵니다
content = page.text_content('h1')
print(f"Heading: {content}")
# 스크린샷을 찍어 저장합니다
page.screenshot(path='example.png')
# 브라우저를 닫습니다
browser.close()
3. 고급 스크랩핑
Playwright는 매우 유연하며, 로그인, 양식 제출, 데이터 추출 등의 다양한 작업을 수행할 수 있습니다.
#예시: 로그인 후 특정 데이터 스크랩
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
# 로그인 페이지로 이동
page.goto('https://example-login-page.com')
# 사용자명과 비밀번호 입력
page.fill('input[name="username"]', 'your-username')
page.fill('input[name="password"]', 'your-password')
# 로그인 버튼 클릭
page.click('button[type="submit"]')
# 로그인 후 이동할 페이지 기다리기
page.wait_for_load_state('networkidle')
# 특정 데이터 스크랩
data = page.text_content('.specific-data-selector')
print(f"Scraped data: {data}")
# 브라우저 종료
browser.close()
4. 스크랩핑 시 주의사항
- robots.txt 준수: 웹사이트의 `robots.txt` 파일을 확인하여 스크랩핑이 허용되는지 확인하세요.
- 적절한 요청 속도 유지: 서버에 과도한 부하를 주지 않도록 요청 간 간격을 두세요.
- IP 차단 대비: 과도한 요청으로 IP가 차단될 수 있으므로 프록시 서버나 VPN을 사용할 수 있습니다.
- 법적 문제: 스크랩핑하려는 사이트의 이용 약관을 확인하고 법적 문제가 발생하지 않도록 주의하세요.
5. 추가 기능 및 확장
- 데이터 저장: 스크랩된 데이터를 CSV, JSON, 데이터베이스 등에 저장할 수 있습니다.
- 헤드리스 모드: 브라우저를 보이지 않게(headless 모드) 실행하여 성능을 향상시킬 수 있습니다.
- 동적 페이지 처리: Playwright는 AJAX로 동적으로 로드되는 데이터도 처리할 수 있습니다.
이 기본 예제를 시작점으로, 다양한 웹 사이트에서 데이터를 스크래핑할 수 있습니다. 필요에 따라 Playwright의 문서를 참조하여 더 복잡한 시나리오를 구현할 수 있습니다.
'DEVEL > PYTHON' 카테고리의 다른 글
PYTHON 두장의 이미지 합성하기 (0) | 2024.04.09 |
---|---|
PYTHON ChatGPT API 예제 (0) | 2023.07.25 |
PYTHON 내 주소에 이더리움 거래 조회 (0) | 2023.07.18 |
[PYTHON] requests 구글 검색 (0) | 2023.04.03 |
[PYTHON] selenium 구글 검색 (1) | 2023.04.03 |