본문 바로가기

Backend/Python

웹크롤링 3. 셀레니움으로 네이버 상품정보 수집

Why 셀레니움 ? : requests의 한계
1. 로그인이 필요한 사이트에서 크롤링이 어려움

2. 동적으로 html을 만드는 경우 : 스크롤하거나 클릭하면 데이터가 생성, url주소가 변경되지 않았는데 데이터가 변경

 

What is 셀레니움 ? 

1. 웹 어플리케이션 테스트를 위한 도구

2. 브라우저를 실제로 띄워서 사람처럼 동작하도록 만들 수 있음.

 

1. 셀레니움 설치

크롬 드라이버 다운로드 → C드라이브로 복사 

라이브러리 설치 - pip install selenium

 

2. 네이버 쇼핑 검색

from selenium import webdriver
from selenium.webdriver.common.keys import Keys #ENTER를 입력하기 위함
import time

# 브라우저 생성
browser = webdriver.Chrome('C:/chromedriver.exe')

# 웹사이트 열기
browser.get('https://www.naver.com')
browser.implicitly_wait(10)  # 로딩이 끝날 때까지 10초까지 기다려줌

# 쇼핑 메뉴 클릭
browser.find_element_by_css_selector('a.nav.shop').click()
time.sleep(2)

# 검색창 클릭
search = browser.find_element_by_css_selector(
    'input.co_srh_input._input')
search.click()

# 검색어 입력
search.send_keys('아이폰 13')
search.send_keys(Keys.ENTER)

3. 무한 스크롤

# 스크롤 전 높이
before_h = browser.execute_script("return window.scrollY")

# 무한 스크롤
while True:
    # 맨 아래로 스크롤을 내린다.
    browser.find_element_by_css_selector("body").send_keys(Keys.END)

    # 스크롤 사이 페이지 로딩 시간
    time.sleep(1)

    # 스크롤 후 높이
    after_h = browser.execute_script("return window.scrollY")

    if after_h == before_h:
        break

    before_h = after_h

4. 상품정보 div + csv파일로 저장

import csv

# 파일 생성
f = open(r"C:\startcoding\chapter05\data.csv",'w', encoding='CP949', newline='')
csvWriter = csv.writer(f)

# 상품정보 div
items = browser.find_elements_by_css_selector(".basicList_info_area__17Xyo")

for item in items:
    name = item.find_element_by_css_selector(".basicList_title__3P9Q7").text
    try:
        price = item.find_element_by_css_selector(".price_num__2WUXn").text
    except:
        price = '판매중단'
    link = item.find_element_by_css_selector(
        ".basicList_title__3P9Q7 > a").get_attribute('href')
    print(name, price, link)
    # 데이터 쓰기
    csvWriter.writerow([name, price, link])

# 파일 닫기
f.close()

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

첫코딩 : 스레드(thread)  (0) 2022.03.20
첫코딩 : 배스킨라빈스31 게임  (0) 2022.03.17
웹크롤링 2.주식현재가 엑셀로 저장하기  (0) 2022.03.02
웹크롤링 1. 뉴스제목+링크 가져오기  (0) 2022.03.02
모듈  (0) 2022.02.06