5. 웹 크롤링 시 자주 발생하는 에러와 대처법
웹 크롤링을 하다 보면 다양한 에러가 발생할 수 있습니다. 이 에러들은 주로 네트워크 문제, 서버 응답 차단, HTML 구조 변경, 셀레니움 설정 오류 등에서 기인합니다. 아래에서 주요 에러와 해결 방법을 정리해보겠습니다.
5.1 HTTP Error (403, 404, 500 등)
- 403 Forbidden: 서버가 크롤링 요청을 차단
- 404 Not Found: 잘못된 URL 또는 삭제된 페이지
- 500 Internal Server Error: 서버 내부 오류
import requests
headers = {'User-Agent': 'Mozilla/5.0'}
res = requests.get('https://example.com', headers=headers)
print(res.status_code) # 200이면 정상
✔ 해결법:
- 적절한
User-Agent
헤더 추가 - 시간 간격을 두고 요청 (e.g.,
time.sleep(1)
) - 프록시(proxy) 서버 또는 VPN 활용
5.2 ConnectionError / Timeout
서버가 응답하지 않거나, 연결이 끊기는 경우 발생합니다.
try:
res = requests.get('https://example.com', timeout=5)
except requests.exceptions.Timeout:
print("요청 시간이 초과되었습니다.")
except requests.exceptions.ConnectionError:
print("연결 오류가 발생했습니다.")
✔ 해결법:
- 인터넷 연결 상태 확인
timeout
설정을 늘려보기- 재시도 로직 추가 (
retry
루프 사용)
5.3 HTML 구조 변경
사이트가 리뉴얼되거나 구조가 바뀌면 soup.find()
등에서 NoneType 오류가 발생합니다.
title_tag = soup.find('h1')
if title_tag:
print(title_tag.text)
else:
print("h1 태그를 찾을 수 없습니다.")
✔ 해결법:
- 크롤링 대상 사이트의 HTML 구조를 자주 점검
try/except
또는if
조건문으로 방어 로직 추가
5.4 Selenium 관련 에러
(1) ElementNotFound, NoSuchElementException: 요소를 찾지 못했을 때 발생
from selenium.common.exceptions import NoSuchElementException
try:
elem = driver.find_element(By.ID, 'search')
except NoSuchElementException:
print("요소를 찾을 수 없습니다.")
(2) 브라우저 실행 오류 (e.g., ChromeDriver 경로 문제):
- Chrome 버전과 ChromeDriver가 맞지 않음
- 환경변수 PATH 문제
✔ 해결법:
- 크롬 버전에 맞는 드라이버 다운로드 (chromedriver.chromium.org)
webdriver-manager
로 자동 관리:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
5.5 JavaScript로 렌더링된 데이터가 보이지 않음
requests로는 보이지 않는 데이터는 JavaScript로 로딩됩니다.
✔ 해결법:
- Selenium 또는 Playwright 사용
- F12 → Network → XHR에서 API 주소 직접 찾기
5.6 robots.txt 차단
사이트가 봇 접근을 막는 경우
✔ 해결법:
/robots.txt
확인 후 접근 가능 여부 체크- 법적, 윤리적 기준에 어긋나지 않는 선에서 접근
5.7 너무 많은 요청으로 IP 차단됨
✔ 해결법:
- 요청 간격 조절 (
time.sleep()
) - IP 로테이션 (프록시 사용)
- Cloudflare 우회 필요 시 Playwright 권장
6. 크롤링 시 주의사항
- 항상 robots.txt와 사이트 이용약관을 확인하세요.
- 상업적 목적의 크롤링은 법적 문제가 될 수 있습니다.
- 서버에 과도한 부하를 주지 않도록 딜레이 또는 쓰로틀링(throttling)을 꼭 넣으세요.