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 |