웹 크롤링 시 자주 발생하는 에러와 대처법

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 문제

✔ 해결법:


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)을 꼭 넣으세요.