본문 바로가기

Develop

쿠팡 웹사이트 크롤링하기 - 제품명, 가격, 및 링크 추출하기

728x90

안녕하세요, 데이터 애호가 여러분!

오늘은 Selenium을 사용하여 쿠팡 웹사이트를 크롤링하는 방법을 소개하려고 합니다. 이번 포스트에서는 검색어에 따라 제품명, 업체명, 그리고 제품 페이지로 연결되는 링크를 추출하는 과정을 단계별로 설명하겠습니다.

준비물

  • Python
  • Selenium
  • ChromeDriver
  • WebDriver Manager

1. 필요한 라이브러리 설치

먼저 필요한 라이브러리를 설치해야 합니다. 아래 명령어를 터미널에 입력하여 설치합니다:

pip install selenium pip install webdriver-manager
 

2. Python 코드 작성

이제 Python 코드로 크롤링 작업을 수행해보겠습니다.

import time

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager


def setup_driver():
    options = webdriver.ChromeOptions()
    # options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36')

    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service, options=options)
    return driver

def search_coupang(keyword):
    driver = setup_driver()
    driver.get("https://www.coupang.com/")

    try:
        # 팝업 닫기 (존재하는 경우)
        try:
            close_button = WebDriverWait(driver, 5).until(
                EC.element_to_be_clickable((By.CLASS_NAME, "close"))
            )
            close_button.click()
        except:
            pass

        # 검색어 입력
        search_box = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.NAME, "q"))
        )
        search_box.send_keys(keyword)
        search_box.send_keys(Keys.RETURN)

        # 검색 결과 로딩 대기
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "search-product"))
        )

        # 스크롤 다운 (더 많은 결과 로딩)
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2)

        products = driver.find_elements(By.CLASS_NAME, "search-product")

        results = []
        for product in products[:10]:  # 상위 10개 제품만 처리
            try:
                item = {}
                item['name'] = product.find_element(By.CLASS_NAME, "name").text
                item['price'] = product.find_element(By.CLASS_NAME, "price-value").text

                ahref = product.find_element(By.TAG_NAME, 'a')
                item['link'] = ahref.get_attribute('href')

                results.append(item)

            except:
                continue

        return results
    except TimeoutException:
        print("페이지 로딩 시간이 초과되었습니다. 네트워크 연결을 확인하거나 나중에 다시 시도해주세요.")
        return []
    except Exception as e:
        print(f"크롤링 중 오류가 발생했습니다: {str(e)}")
        return []
    finally:
        driver.quit()


def main():
    keyword = input("검색할 키워드를 입력하세요: ")
    results = search_coupang(keyword)

    if results:
        print(f"\n'{keyword}' 검색 결과:")
        for idx, result in enumerate(results, 1):
            print(f"{idx}. 제품명: {result['name']}")
            print(f"   가격: {result['price']}")
            print(f"   링크: {result['link']}")
            print("-" * 50)

        print(f"\n총 {len(results)}개의 제품이 검색되었습니다.")
    else:
        print("검색 결과를 가져오는 데 실패했습니다.")

if __name__ == "__main__":
    main()

설명

  1. 라이브러리 임포트: Selenium, WebDriver Manager 등을 임포트합니다.
  2. 드라이버 설정: WebDriver Manager를 사용하여 ChromeDriver를 설치하고 설정합니다. 헤드리스 모드와 사용자 에이전트를 설정하여 자동화 탐지를 우회합니다.
  3. 쿠팡 웹사이트 열기: driver.get() 메서드를 사용하여 쿠팡 웹사이트를 엽니다.
  4. 검색어 입력 및 검색: 검색창 요소를 찾아 검색어를 입력하고 검색을 실행합니다.
  5. 제품명 및 링크 수집: 제품명과 제품으로 연결되는 a href 링크를 수집하여 출력합니다.
  6. 드라이버 종료: driver.quit()을 호출하여 브라우저를 닫습니다.

이 코드는 주어진 검색어에 대해 쿠팡에서 제품 이름과 제품 페이지로 연결되는 링크를 추출합니다. 이를 통해 원하는 제품 정보를 쉽게 수집할 수 있습니다.

 

예시

https://youtu.be/imKh8qiawHo

 

주의 사항

  • 합법성: 웹 크롤링은 웹사이트의 이용 약관을 위반할 수 있습니다. 크롤링 전에 쿠팡의 이용 약관을 검토하고 허용되는지 확인하십시오.
  • 공손한 크롤링: 너무 많은 요청을 보내는 것은 서버에 부담을 줄 수 있으므로, 요청 간의 적절한 지연을 추가하여 서버를 과부하시키지 않도록 주의해야 합니다.

이 글이 여러분의 데이터 수집과 분석에 도움이 되기를 바랍니다. 궁금한 점이나 추가적인 도움이 필요하다면 댓글로 남겨주세요. 감사합니다!

반응형