본문 바로가기
코딩 연습/파이썬 크롤링

네이버 쇼핑 상품 리스트 추출 후 엑셀 저장

by good4me 2022. 7. 12.

goodthings4me.tistory.com

네이버 쇼핑에서 검색어를 입력하면 상품명, 가격, 카테고리, 리뷰건수, 구매건수, 등록월, 업체명, 등급, 그리고 쇼핑몰 카탈로그 내의 쇼핑몰 최저가 리스트까지 추출하고 엑셀로 저장하는 파이썬 크롤링 연습 코드임  

 

 

네이버 쇼핑몰 상품 리스트 추출 및 엑셀 저장하기

[파이썬 소스 코드]

from selenium import webdriver
from selenium.webdriver.common.by import By
import time, random
import openpyxl


def chrome_driver():
    options = webdriver.ChromeOptions()
    # options.add_argument("headless")  # 웹 브라우저를 시각적으로 띄우지 않는 headless chrome 옵션
    options.add_experimental_option('detach', True)
    options.add_experimental_option("excludeSwitches", ["enable-logging"])  # 개발도구 로그 숨기기
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
    options.add_argument(f'user-agent={user_agent}')
    options.add_argument("start-maximized") # 창 크기 최대로
    options.add_argument("disable-infobars")
    options.add_argument("--disable-extensions")
    driver = webdriver.Chrome('./chromedriver.exe', options=options)
    return driver


def shopping_list(keyword):

    ## 추출한 데이터를 저장할 엑셀 파일(검색 상품명) 생성
    fileName = keyword + '.xlsx'
    wb = openpyxl.Workbook()
    # wb.save('./' + fileName)
    ws = wb['Sheet']
    theme = ['검색 상품명', '상품명', '최저', '가격', '카테고리', '리뷰', '구매건수', '등록월', '업체명', '등급', '최저가']
    ws.append(theme)
    wb.save('./' + fileName)

    driver = chrome_driver()

    url = f'https://search.shopping.naver.com/search/all?query={keyword}&frm=NVSHATC'
    driver.get(url)
    time.sleep(1.5)
    
    ## 네이버 쇼핑은 마우스 스크롤 할 때마다 리스트가 추가되기때문에 페이지 맨 마지막까지 스크롤 시킴
    for i in range(7):
        driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
        time.sleep(random.uniform(0.3, 0.7))

    # 상품 리스트 : ul 태그 밑에 li 태그로 되어있음
    ul_tag = driver.find_element(By.CLASS_NAME, 'list_basis')
    lis = ul_tag.find_elements(By.CLASS_NAME, 'basicList_item__2XT81')
    print(len(lis))
    
    rcnt = 2
    for li in lis:
        
        div_title = li.find_element(By.CLASS_NAME, 'basicList_title__3P9Q7')
        title = div_title.text.strip()

        if len(li.find_elements(By.CLASS_NAME, 'ad_ad_stk__12U34')):
            title = 'AD_' + title  # 광고노출상품
        print(title)

        lower = ''
        if len(li.find_elements(By.CLASS_NAME, 'price_low__2vp2A')):
            lower = li.find_element(By.CLASS_NAME, 'price_low__2vp2A').text
        price = li.find_element(By.CLASS_NAME, 'price_num__2WUXn').text.replace('원', '').replace(',', '')
        if lower:
            print(lower, price)
        else:
            print(price)

        category_div = li.find_element(By.CLASS_NAME, 'basicList_depth__2QIie')
        category_span = category_div.find_elements(By.TAG_NAME, 'span')
        
        category = ''
        for cat_span in category_span:
            category += cat_span.text + '>'
        print(category)
        
        ## 리뷰,별점,구매건수,등록일 관련 parent element
        rev_reg = li.find_element(By.CLASS_NAME, 'basicList_etc_box__1Jzg6')
        
        # a 태그의 텍스트로 분기해서 리뷰,구매건수 추출
        a_tag = rev_reg.find_elements(By.TAG_NAME, 'a')
        #print(len(a_tag))

        review = ''
        purch_cnt = ''
        for a in a_tag:
            if a.text[:2] == '리뷰':
                review = a.text
            if a.text[:4] == '구매건수':
                purch_cnt = a.text[4:]

        # span 태그의 텍스트로 등록일 추출
        span_tag = rev_reg.find_elements(By.TAG_NAME, 'span')
        regist_day = ''
        for span in span_tag:
            if span.text[:3] == '등록일':
                regist_day = span.text[4:]

        print(f'리뷰:{review}, 구매건수:{purch_cnt}, 등록일:{regist_day}')
    
        ## 쇼핑몰 등급
        lower_list = ''
        if len(li.find_elements(By.CLASS_NAME, 'price_low__2vp2A')):  # '최저' 문구 있으면 - 상품카타로그 묶임 부분
            lis = li.find_elements(By.CSS_SELECTOR, 'div.basicList_mall_area__lIA7R > ul > li')  # 업체와 가격 리스트
            # print(len(lis))
            for li in lis:
                lo_cmpy = li.find_element(By.CLASS_NAME, 'basicList_mall_name__1XaKA').text
                lo_price = li.find_element(By.CLASS_NAME, 'basicList_price__2r23_').text
                lower_list += lo_cmpy + ':' + lo_price + ', '
            print(f'{lower_list}\n\n')

        else:  # 상품카타로그 묶임 아닌 경우
            company = ''
            if cmpy := li.find_element(By.CLASS_NAME, 'basicList_mall__sbVax').text:  # a 태그에 업체명이 있는 경우
                company = cmpy

            else:  # a 태그에 업체명이 없고 이미지인 경우(오픈마켓 명칭 등), img alt로 찾음
                company = li.find_element(By.CLASS_NAME, 'basicList_mall__sbVax').find_element(By.TAG_NAME, 'img').get_attribute('alt')
            
            # 업체 등급
            div_grade = ''
            try:
                div_grade = li.find_element(By.CLASS_NAME, 'basicList_grade__LMHXE').text
            except:
                print('무등급!')
            print(f'{company}: {div_grade}\n\n')

        ## 엑셀에 저장
        ws.cell(rcnt, 1).value = keyword
        ws.cell(rcnt, 2).value = title
        ws.cell(rcnt, 3).value = lower
        ws.cell(rcnt, 4).value = price
        ws.cell(rcnt, 5).value = category
        ws.cell(rcnt, 6).value = review
        ws.cell(rcnt, 7).value = purch_cnt
        ws.cell(rcnt, 8).value = regist_day
        ws.cell(rcnt, 9).value = company
        ws.cell(rcnt, 10).value = div_grade
        ws.cell(rcnt, 11).value = lower_list

        wb.save('./' + fileName)               

        rcnt += 1 
    
    driver.close()

shopping_list('샷시')
  • 본 코드를  기준으로 페이지 변경 부분을 for문으로 작성할 경우 지정한 페이지 숫자만큼의 리스트 전체를 추출할 수 있을 것임

 

good4me.co.kr

 

 

[실행 결과]

 

[엑셀 파일 리스트]

엑셀 파일 - 상품 리스트
엑셀 파일 - 상품 리스트

[터미널 출력 결과]

48
AD_LG, KCC 등 창호/샷시/샤시 교체 무료실측 및 시공
9900
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2021.03.
무등급!
시흥시 샤시나라: 


AD_발코니 방화판 셀프시공 발코니확장 행위허가 사용승인용
81000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2022.01.
무등급!
페어피스: 


AD_발코니 방화판 출장시공 발코니확장 행위허가 사용승인용
110000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2022.01.
무등급!   
페어피스: 


AD_방화판(발코니 확장 행위허가 사용승인용) 출장 시공 상품
110000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰22, 구매건수:, 등록일:2021.03.
무등급!
집담몰닷컴: 


샷시수리 Kcc LG 현대롤라 한화 샷시보수 호환 로라 방충망레일 
레일보강 샤시 부자재
15000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰996, 구매건수:655, 등록일:2017.09.
찬바람119: 빅파워


홈레일 깨진 샷시레일수리 샷시로라 샤시레일보수 찬바람119 본사
몰
최저 9300
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.726, 구매건수:, 등록일:2019.11.
GSSHOP:9,300, 11번가:14,550, 롯데ON:16,600, 


샷시 레일 보수 아파트 베란다 창문 부속 보수 교체 파손 샤시 롤
러 로라 수리 보강 시공
7900
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰135, 구매건수:402, 등록일:2021.12.
곽씨네슈퍼: 빅파워


샷시수리 로라교체 /광주 전라 제주 /하이샷시 깨진샷시 LG KCC 
샤시보수 레일보강
17000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰9, 구매건수:31, 등록일:2020.12.
찬바람119: 빅파워


샷시레일 수리 보수 파손 베란다 교체 하이샷시 로라 롤러 40종 (무료재단) 0.5M
5000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰82, 구매건수:98, 등록일:2021.01.
e신성: 파워


샷시수리 샤시보수레일 샷시레일파손 샷시보수 로라
최저 7700
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2022.07.
찬바람119:7,700, G마켓:10,000, 


아파트베란다 샷시교체 인천샷시공사 그린창호샷시 KCC샷시
3000000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2021.02.
무등급!
그린창호샷시 쇼핑몰: 


하이샤시롤러 창호로라 호차 샷시호차 창문롤러
5500
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰227, 구매건수:, 등록일:2019.04.
옥션: 플래티넘


제작 후 배송 - 하이샤시 단창22mm 500x500
109000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2022.06.
무등급!
미래로샵: 


엘지 하우시스 LG 지인 창호 전국 본사 직 시공 10년보증
8700000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰5, 구매건수:1, 등록일:2021.06.
꾸며드림: 빅파워


금강제화 샤인샷시 창문바퀴 diy 샤시호차 샷시롤러 도르래 목문 
나무문 샷시 115g ra30 115k ra36 lg kcc 한화 914pb 941        
최저 4500
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.790, 구매건수:, 등록일:2022.04.
e신성:4,500, 


KCC 창호 샤시 시공 30평형 계단식 전체 교체 뉴프라임
최저 7000000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 52, 구매건수:, 등록일:2022.05.
윈도우프로:7,000,000, 


알파인 Alpine 2중 무격자 창호 Single Slide 미닫이창 SL_4050
최저 176000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 52, 구매건수:, 등록일:2020.10.
빌드하우징:176,000, 


샷시로라 샤시롤러 샷시레일 바퀴 도르래 호차 나일론 황동
1100
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰98, 구매건수:, 등록일:2021.07.
태영철물: 굿서비스


베란다 거실 아파트 창문 교체 창호 업체 이중창 공사 미닫이 제
작 시공 설치 견적
9900
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:1, 등록일:2021.01.
주식회사 송명: 파워


멀티샷시로라 베란다샷시로라 현관출입문창문롤러 하
최저 6400
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.3171, 구매건수:, 등록일:2020.08.
11번가:6,400, G마켓:6,430, 인터파크:7,000, kormarket:7,080, 
디알리온:7,277,


lg kcc 한화 윈체 휴그린 거실창호샷시 발코니전용 외부 모델하우
스전시상품
3500000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2021.02.
무등급!
화봉모델하우스: 


샷시보수용레일 R자 ㄷ자
최저 6000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.5456, 구매건수:, 등록일:2020.07.
코리아마켓:6,000, G마켓:6,520, 롯데ON:6,960, 11번가:7,040, 옥
션:7,090,


다용도롤러 목문용호차 로라모음 샷시로라 KCC LG 한화 알루미늄 
바퀴 쇼케이스
최저 4500
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.847, 구매건수:, 등록일:2021.11.
e신성:4,500, G마켓:5,500, 인터파크:5,500, 


창문 샷시보수용레일 10mm 1.5M 무료절단 아파트 베란다 거실샷시
레일 파손 교체 수리
8800
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰463, 구매건수:423, 등록일:2021.02.
철물학교: 빅파워


AD_방화판(발코니 확장 행위허가 사용승인) 셀프시공 DIY 세트 상
품
66000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰68, 구매건수:, 등록일:2021.03.
무등급!
집담몰닷컴: 


AD_하우시스오느른 메종드폴 창호 샷시 리모델링 인테리어
100000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2022.03.
무등급!
하우시스오느른: 


AD_GEZE TS803N 게제 독일 히든도어 도어클로져 도어체크 컨실드 
숨은 매입
230000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:2, 등록일:2022.03.
남선하드웨어금속: 빅파워


AD_창문수대 C762 오프닝각도조절수대 PN
5500
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰3, 구매건수:2, 등록일:2019.10.
철물갓: 빅파워


신성 샷시롤러 샷시수리 베란다샷시 레일 교체 바퀴 창문 LG KCC 
한화 현대 알루미늄
4500
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰38, 구매건수:148, 등록일:2021.12.
e신성: 파워


엘지창호 홈샤시 거실중문 베란다샤시 레일 롤러 보수 수리
1000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2018.12.
무등급!
홈앤픽스: 


엘지 터닝도어 LG - TD140 샷시도어 시공포함가
910000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰14, 구매건수:, 등록일:2021.03.
무등급!
스마트도어: 


제이드 피닉스 싱글슬라이드 5040 1524x1219 미국식시스템창호 전
원주택 제이드 3중창호
최저 198000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2022.05.
SS홈센터:198,000, 


캐스캐이드 격자 케스케이드 싱글슬라이더 6040 S S 6040 미닫이
창 미국산 미국식 창호 창문 이중유리 전원주택 CASCADE
최저 71000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2022.03.
삼양케이우드:71,000, 


샷시 제작/납품(유리코킹가능)/ KCC빠른제작
990
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2022.04.
무등급!
성훈창호: 


백색샷시스토퍼 샷시부속철물
최저 200
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.8117, 구매건수:, 등록일:2020.01.
kormarket:200, 코리아마켓:210, 위메프:210, 덕자마켓:220, 11번
가:220,


보급형 샤시 스토퍼 샷시부속 KCC LG 한화 레일보수
최저 480
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.7145, 구매건수:, 등록일:2021.03.
위메프:480, 샤시24:500, 인터파크:500, G마켓:500, 쿠팡:500, 


샤시로라 샷시롤러 샤시레일 교체 셀프보수 창문
최저 10950
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.5125, 구매건수:, 등록일:2019.11.
11번가:10,950, 옥션:10,960, 인터파크:12,500, 쿠팡:12,500, G마
켓:22,300,


샷시로라 창문틀 바퀴 하이샤시 롤러 베란다문
최저 6480
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 3.9334, 구매건수:, 등록일:2016.10.
옥션:6,480, 서연:6,490, G마켓:6,510, 11번가:7,990, 롯데ON:8,820,


레일 매입형 140B 샤시 스토퍼 LG하이샤시 KCC창호
최저 1000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.733, 구매건수:, 등록일:2021.03.
샤시24:1,000, G마켓:1,000, 쿠팡:1,000, 옥션:1,000, 인터파크:1,000,


샷시 고임목 쐐기 쿠사비 구사비 문틀맞춤 고임판
최저 8400
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.8123, 구매건수:, 등록일:2020.07.
e신성:8,400, G마켓:8,400, 신성공업:8,400, 옥션:8,400, 인터파
크:30,400,


신성 샷시레일 레일문 알루미늄 라운드 직각형 내경10mm
최저 15000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.9118, 구매건수:, 등록일:2021.02.
자재랜드:15,000, 쿠팡:15,000, 


알루미늄 샷시 로라 샷시 창문 부속
최저 1320
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.85, 구매건수:, 등록일:2021.12.
대명창호부속:1,320, 


샷시보수레일 옵션선택 1.5m 샤시보수
8180
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰631, 구매건수:623, 등록일:2020.09.
철물갓: 빅파워


샷시레일 수리 보수 파손 베란다 교체 하이샷시 로라 롤러 40종 (무료재단) 2.4M
25000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰378, 구매건수:397, 등록일:2021.01.
e신성: 파워


샷시 스트라이커 잠금장치 창호 부속 셀프 교체
3300
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰18, 구매건수:, 등록일:2022.05.
온더하우스: 빅파워


샤시시공 하이샤시 인터넷무료견적-LG, 영림, KCC, PNS 샷시교체
30000
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:, 구매건수:, 등록일:2018.08.
무등급!
미래로샵: 


범퍼형 샤시 스토퍼 충격 방지/베란다/창문/창호고정
최저 1250
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.7101, 구매건수:, 등록일:2018.11.
옥션:1,250, 샤시24:1,500, 위메프:1,500, 샤시24:1,500, 티몬:1,500,


레일 매입형 115B 샤시 스토퍼 완충 고정 창문 샷시
최저 480
가구/인테리어>DIY자재/용품>리모델링>창문/창호/새시>
리뷰:리뷰별점 4.624, 구매건수:, 등록일:2022.03.
위메프:480, 샤시24:500, 티몬:500, 쿠팡:500, 인터파크:500,

 

 

 

댓글