월레스와 그로밋: 코딩의 날

web_crawling(무신사에서 캉골 브랜드 제품의 제품명 & 제품가격 크롤링) 본문

Python/Etc

web_crawling(무신사에서 캉골 브랜드 제품의 제품명 & 제품가격 크롤링)

구운 감자 2025. 1. 30. 14:44
def test1():
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.common.by import By
    
    import json
    import csv
    import pyautogui
    import pyperclip
    import time
    from selenium.webdriver.common.keys import Keys
    
    # 브라우저 생성 후 꺼짐 방지 & 최신 버전 유지
    options = Options()
    options.add_experimental_option("detach", True)
    service = Service(executable_path= ChromeDriverManager().install())
    browser = webdriver.Chrome(service=service, options=options)
    
    browser.implicitly_wait(10)
    browser.get("https://www.musinsa.com/main/113?NaPm=ct%3Dlxbkyaun%7Cci%3Dcheckout%7Ctr%3Dds%7Ctrx%3Dnull%7Chk%3D2c2bee0776cd01ca2f32e26fb8bbe20216b3dc0b")
    browser.maximize_window()   # 화면크기를 최대한 키우기
    
    # 검색 버튼 클릭
    #headerCommonLayout > header > div > div.common-layout__sc-do5azq-2.common-layout__sc-do5azq-4.kjbdqo.esZxYr > button
    browser.find_element(By.CSS_SELECTOR, "#headerCommonLayout > header > div > div.common-layout__sc-do5azq-2.common-layout__sc-do5azq-4.kjbdqo.esZxYr > button").click()
    
    # 검색창 클릭
    browser.find_element(By.CSS_SELECTOR,"#commonSearchModule > main > header > div > input").click()
    
    # 검색어 입력
    pyperclip.copy('kangol')
    pyautogui.hotkey('ctrl', 'v')
    time.sleep(3)
    browser.find_element(By.XPATH, '/html/body/div[2]/main/section/div/ul/li[1]/a').click()
    #kangol_site = browser.find_element(By.CSS_SELECTOR, "#commonSearchModule > main > section > div > ul > li:nth-child(1) > a").get_attribute("href")
    # browser.get(kangol_site)
    
    browser.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.PAGE_DOWN)

    time.sleep(5)
    # 상의 옷 클릭
    browser.find_element(By.CSS_SELECTOR, 'body > div.musinsa-wrapper.n-brand.container.n-brand-product > div.n-content-brand > section.brands-filter-image.set-draggable > button:nth-child(1)').click()
    
    # 스크롤 전 화면큭
    before = browser.execute_script("return window.scrollY")
    
    # 무한 스크롤
    while True:
        browser.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END)
        time.sleep(2)
        after = browser.execute_script("return window.scrollY")
        if before == after:
            break
        before = after
    
    # 상품 정보 추출 : 상품명, 가격, 상세페이지
    prod_list = []  # [[], [], [], ...]
    
    #listProducts > li:nth-child(1)
    item_list = browser.find_elements(By.CSS_SELECTOR, "#listProducts > li")
    
    for item in item_list:
        dic = {}
        #listProducts > li:nth-child(1) > div.brandshop-product__info > a
        dic["제품명"] = item.find_element(By.CSS_SELECTOR, "div.brandshop-product__info > a").text
        #listProducts > li:nth-child(1) > div.brandshop-product__info > div.brandshop-product__price
        dic["제품가격"] = item.find_element(By.CSS_SELECTOR, "div.brandshop-product__info > div.brandshop-product__price > div > strong").text
        prod_list.append(dic)
    
    time.sleep(3)
    browser.quit()
    
    # json 파일 저장
    print(">>> JSON 파일 출력 <<<")
    with open("musinsa.json","w", encoding="utf8") as f:
        json.dump(prod_list, f, ensure_ascii = False)
        
    # CSV 파일 저장
    print(">>> CSV 파일 출력 <<<")
    with open("musinsa.csv", "w", newline='', encoding="utf8") as f:
        writer = csv.DictWriter(f, fieldnames=["제품명", "제품가격"])
        writer.writeheader()
        writer.writerows(prod_list)
    
test1()

 

자동으로 무신사 사이트에서 캉골 브랜드를 검색합니다.

그리고 그 안의 제품들의 제품명과 가격을 가져와서 json과 csv 파일로 목록을 만들어줍니다.

밑 ppt는 무신사, 캉골, 웹 크롤링 코드에 대한 간단한 설명과 결과가 담겨져 있습니다.

웹_크롤링.pptx
1.42MB

 

 

'Python > Etc' 카테고리의 다른 글

토큰 수 출력해보기  (0) 2025.03.25