
구매대행 비즈니스와 웹 크롤링 자동화의 필요성
해외 구매대행이나 쿠팡 파트너스와 같은 제휴 마케팅 비즈니스를 운영함에 있어, 가장 많은 시간과 노동력이 소모되는 구간은 단연 상품 정보의 수집과 가공입니다. 수백, 수천 개의 상품 페이지를 일일이 방문하여 이미지, 상품명, 가격, 상세 설명 등을 복사하고 엑셀에 붙여넣는 단순 반복 작업은 비즈니스의 확장성을 심각하게 저해하는 병목 현상의 주범입니다.
이러한 물리적인 시간 한계를 극복하기 위해 파이썬(Python)을 활용한 웹 크롤링(Web Crawling) 자동화 시스템 구축이 필수적으로 요구됩니다. 파이썬의 BeautifulSoup이나 Selenium 라이브러리를 활용하면 사람이 마우스와 키보드로 수행하는 모든 데이터 수집 행위를 코드로 구현하여 24시간 백그라운드에서 동작하게 만들 수 있습니다.
하지만 상업용 웹사이트들은 무분별한 데이터 긁어가기를 방지하기 위해 다양한 방어 기제를 갖추고 있습니다. 따라서 단순히 HTML 태그를 읽어오는 수준을 넘어, 현업에서 발생하는 다양한 차단 로직과 동적 렌더링 환경을 돌파하기 위한 고도화된 예외 처리 및 트러블슈팅 경험이 무엇보다 중요합니다.
파이썬 크롤러 개발 중 직면하는 치명적인 오류와 해결 방안
초기 크롤링 봇 설계 당시 가장 큰 실수는 타겟 웹사이트가 고정된 정적 페이지일 것이라는 순진한 가정이었습니다. 실제 글로벌 전자상거래 플랫폼에서 데이터를 수집하며 겪었던 주요 실패 사례와 이를 극복한 기술적 조치들을 공유합니다.
1. 동적 웹 페이지(SPA) 로딩 지연과 데이터 누락 현상
가장 먼저 직면한 문제는 수집된 엑셀 파일의 절반 이상이 빈칸으로 출력되는 현상이었습니다. 파이썬의 기본 requests 모듈을 사용하여 상품 페이지의 URL을 호출했을 때, 가격이나 리뷰 데이터가 화면에 표시되지 않았습니다. 이는 최근의 대형 쇼핑몰들이 화면의 틀만 먼저 보여준 뒤, 자바스크립트(JavaScript)를 통해 백그라운드에서 비동기적으로 데이터를 채워 넣는 동적 렌더링(CSR) 방식을 채택하고 있기 때문입니다.
이 오류를 바로잡기 위해 단순한 HTML 파서를 버리고 실제 브라우저를 띄워 자바스크립트를 구동시키는 Selenium 기반으로 아키텍처를 전면 수정했습니다. 또한, 페이지 이동 직후 즉각적으로 데이터를 긁어오는 대신, WebDriverWait 패키지를 도입하여 ‘특정 가격 정보 태그가 화면에 렌더링될 때까지’ 최대 10초간 대기하는 명시적 대기(Explicit Wait) 로직을 적용함으로써 데이터 누락 문제를 완벽하게 해결했습니다.
2. 기계적 접근으로 인한 IP 차단 및 캡차(CAPTCHA) 발생
수집 속도를 극대화하기 위해 크롤링 루프(Loop) 사이에 딜레이를 주지 않고 스크립트를 실행한 결과, 타겟 서버의 방화벽 시스템(WAF)에 봇(Bot)으로 탐지되어 작업 환경의 공인 IP가 통째로 차단당하는 뼈아픈 실수를 겪었습니다. 브라우저에 접속하면 상품 화면 대신 로봇이 아님을 증명하라는 캡차(CAPTCHA) 이미지만 출력되었습니다.
이러한 방어 시스템을 우회하기 위해 마치 실제 사람이 쇼핑하는 것처럼 행동 패턴을 위장하는 작업이 필요했습니다. time.sleep() 함수에 random 모듈을 결합하여 페이지 클릭 사이에 2.5초에서 5.8초 등 불규칙한 난수 형태의 대기 시간을 부여했습니다. 더불어 요청 헤더(Header)의 User-Agent 값을 무작위의 다양한 브라우저 버전(Chrome, Safari 등)으로 계속 교체해 주며, 단일 IP에 트래픽이 집중되지 않도록 프록시(Proxy) 서버 풀을 연동하여 차단 리스크를 근본적으로 분산시켰습니다.
3. DOM 구조 변경에 따른 파싱(Parsing) 에러와 데몬 크래시
웹 크롤링 시스템에서 가장 통제하기 힘든 변수는 타겟 쇼핑몰이 예고 없이 웹사이트의 디자인이나 HTML 클래스명(DOM 구조)을 개편하는 경우입니다. 특정 상품의 가격을 감싸고 있던 태그의 이름이 단 하나라도 변경되면, 이를 지정해둔 파이썬의 요소 찾기(find_element) 메서드는 즉각적으로 NoSuchElementException을 발생시키며 전체 수집 스크립트를 그 자리에서 강제 종료시켜 버립니다.
수천 개의 상품 중 단 하나의 페이지 구조가 이상하다고 해서 밤새 돌아가야 할 자동화 프로세스 전체가 멈추는 것은 치명적입니다. 이를 방지하기 위해 모든 데이터 추출 단계를 견고한 예외 처리 로직으로 감싸야 했습니다.
견고한 자동화를 위한 Try-Except 예외 처리 패턴
전체 크롤러의 안정성을 확보하기 위한 핵심은 철저한 Try-Except 블록의 구성에 있습니다. 요소 추출 코드를 Try 문 안에 배치하고, 만약 태그 구조가 달라 오류가 발생하면 Except 문으로 빠지게 하여 스크립트 종료 대신 ‘수집 불가’ 혹은 ‘NULL’ 값을 반환하도록 시스템의 유연성을 확보했습니다.
이 과정에서 오류가 발생한 타겟 URL과 예외 발생 시간을 별도의 에러 로그(Error Log) 파일에 기록하도록 조치했습니다. 이렇게 구성하면 크롤링 프로세스는 중단 없이 끝까지 실행되며, 관리자는 다음 날 아침 에러 로그에 남겨진 소수의 실패 URL만 직접 확인하여 코드의 선택자(Selector) 기준을 업데이트하는 방식으로 매우 효율적인 유지보수가 가능해집니다.
결론적으로 전자상거래 데이터 수집 자동화는 코드를 짜는 행위 자체보다, 네트워크 지연, 서버의 방어 로직, 사이트 구조 변화라는 수많은 변수 속에서 프로그램이 죽지 않고 지속적으로 동작하게 만드는 ‘예외 처리의 예술’이라고 볼 수 있습니다. 이러한 탄탄한 파이프라인이 구축되었을 때 비로소 비즈니스는 단순 노동에서 벗어나 마케팅과 세일즈 전략이라는 본질에 집중할 수 있게 됩니다.