[Python] 네이버 쇼핑 상품 정보 크롤링(with 엑셀파일)

Idel·2022년 12월 12일
0

기술블로그

목록 보기
9/38
  1. 가져올 파이썬 모듈

    • 셀레니움 (with ChromeDriver)
  2. 크롤링 하기 위한 환경 만들기

  3. 페이지 html 분석하기

  4. Python 코드 작성하기

    def naver_crawling_csv():
    
        # selenium 라이브러리에서 필요한 모듈 가져오기
        from selenium import webdriver  # selenium 라이브러리에서 webdriver 모듈을 가져옴
        from selenium.webdriver.common.by import By  # selenium 라이브러리에서 By 모듈을 가져옴
        from selenium.webdriver.common.keys import Keys # selenium 라이브러리에서 Keys 모듈을 가져옴
    
        # time, csv 모듈을 가져옴
        import time
        import csv  
    
        # 1. 크롬 브라우저를 실행, 네이버 홈페이지를 열어 네이버 쇼핑 페이지로 이동
        brower = webdriver.Chrome('C:/chromedriver.exe')  
        brower.get('https://www.naver.com')
        brower.implicitly_wait(10)
    
        brower.find_element(By.CSS_SELECTOR, 'a.nav.shop').click()
        time.sleep(2) # 2초간 대기
    
         # 2. 검색창 찾고 검색창 클릭
        search = brower.find_element(By.CSS_SELECTOR, 'input._searchInput_search_text_3CUDs')
        search.click()
    
         # 3. 검색어 입력
        search.send_keys("k2 비숑 리버서블")
        search.send_keys(Keys.RETURN)
    
        prev_height = brower.execute_script("return document.body.scrollHeight")
    
        #  무한 스크롤 : 현재높이와 끝의 높이가 끝이면 탈출
        while True:   
            brower.execute_script("window.scrollTo(0,document.body.scrollHeight)")
    
            time.sleep(2)   # 2초간 대기
    
            # 현재높이 저장
            current_height = brower.execute_script("return document.body.scrollHeight")
    
            # 현재높이와 끝의 높이가 끝이면 탈출
            if current_height == prev_height:
                break
            # 업데이트해줘서 끝낼 수 있도록
            prev_height = current_height
    
        # 4. 파일 열고 csv 파일 쓰기 
        f = open(r"D:\chy202212\python_ws\startcoding_crawling\naver_shopping_crawling\data.csv", "w", encoding="CP949", newline="")
        csvWriter = csv.writer(f)
    
        # 5. 상품 정보 영역 태그 찾고 순서대로 변수에 담기
        items = brower.find_elements(By.CSS_SELECTOR, '.basicList_info_area__TWvzp')
    
        # for문 : 상품이름, 가격, 상세페이지 주소를 순서대로 보여주고 csv 파일 저장
        for item in items: 
            try:
                name = item.find_element(By.CSS_SELECTOR, '.basicList_title__VfX3c').text # 상품 이름 태그. 
                price = item.find_element(By.CSS_SELECTOR, '.price_num__S2p_v').text # 상품 가격 태그
                link =  item.find_element(By.CSS_SELECTOR, '.basicList_title__VfX3c > a').get_attribute('href') # 상품 링크 찾기
                print(name, price, link)
                csvWriter.writerow([name, price, link])
            except Exception as e:
                print(e)
        # 파일 닫기
        f.close()
        

Reference

0개의 댓글