[카테고리:] 파이썬

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

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