[python] 블로그 자동 포스팅 프로그램 with 쿠팡 파트너스 - 3 상품 리뷰, 제목, 이미지 크롤링

    지난 포스팅에서 상품 링크를 불러오는 것 까지 성공 했었다.

    나의 계획은 상품 링크, 대표 이미지, 베스트 리뷰, 상품 이름을 추출해서 이것들을 참고해 GPT API를 이용해 글을 쓰고 자동 포스팅 하는 것이었다. 하지만 상품 리뷰를 가져오는 것에서 막히고 말았다. 내가 불러온 각 상품의 링크를 타고 들어가서 리뷰를 가져오는 방식으로 상품 링크를 가져오려고 했다. 하지만 링크를 타고 들어가자 컴퓨터가 아닌 모바일 버전이 나오며 앱으로 연결, 쿠폰등의 창들이 뜨며 크롤링을 방해하는 상황을 만났다.

     

    문제는 이 코드에 있었다. 헤더에 가짜 user-agent를 생성해 봇 감지를 회피하기 위한 코드였다.

    options.add_argument(f"user-agent={UserAgent().random}")
     
    하지만 User-Agent를 직접 찍어보니 모바일 버전과 컴퓨터 버전이 혼합해서 나오는 것을 볼 수 있다.

     

     

    그래서 컴퓨터 유저로 고정시켜두고 뒤에 숫자만 랜덤을 돌리는 방식으로 바꾸어 문제를 해결하였다.

    chrome_version = random.randint(118, 122)
    user_agent = f"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{chrome_version}.0.0.0 Safari/537.36"

     

    options.add_argument(f"user-agent={user_agent}")

     

     

    하지만 또다시 문제를 만나게 된다. 리뷰를 크롤링 하기 위해서 상품의 상세 페이지를 연속적으로 접근하면 쿠팡 서버에서 이를 공격으로 인식하고 차단하는 것이었다. sleep()을 주고 시간을 랜덤하게 바꾸어 가며 접근해 봤지만 문제는 해결되지 않았다.

     

    그때 한 가지 비책을 떠올리게 된다. 연속 접근으로 쿠팡에게 차단당하는 일은 user-agent를 랜덤으로 돌릴 때도 종종 있었다. 하지만 모바일 사용자로 접근했을 경우에는 차단을 당하지 않았던 것 이 생각났다. 그래서 이번에는 오히려 모바일 유저로 고정시켜두고 뒤에 숫자만 랜덤을 돌리는 방식으로 바꾸었다. 모바일 버전에서 나오는 앱 설치, 쿠폰등의 팝업에 대해서는 예외처리를 사용하였다.

    chrome_version = random.randint(118, 122)
    user_agent = f"Mozilla/5.0 (iPhone; CPU iPhone OS 17_3 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Version/17.0 Mobile/{chrome_version}.0.0 Safari/537.36"
       

    이렇게 리뷰, 이미지, 제목 크롤링의 문제를 해결하였다.

    댓글