Python selenium 크롤링

HGY·2023년 6월 27일

Python

목록 보기
13/13

selenium

기본으로 내장된 라이브러리가 아니므로 설치 필요함

selenium 라이브러리

!pip install selenium
from selenium import webdriver as wb // < 브라우저를 제어하기 위한 라이브러리>
from selenium.webdriver.common.by import By // <html 문서에서 태그와 선택자를 찾기 위한 라이브러리>
from selenium.webdriver.common.keys import Keys // <웹에게 값을 "입력"하기 위한 라이브러리>
from bs4 import BeautifulSoup as bs // <컴퓨터가 이해하기 쉬운 객체 형태로 변환해주는 라이브러리>
import pandas as pd // <수집한 정보를 DataFrame화 하기 위한 라이브러리>
import time // <코딩 중간에 대기시간을 넣기 위한 라이브러리>
import os // <파일이나 폴더를 생성해주는 라이브러리 (운영체제 기능 사용하는 라이브러리)>
from urllib.request import urlretrieve // <이미지 경로(url)를 파일로 변환해주는 라이브러리>

selenium 환경설정

크롬드라이버를 항상 최신버전으로 유지해주어야 한다.
구글에 "크롬드라이버" 검색
사용 중인 크롬 버전과 일치하는 드라이버를 크롤링 폴더에 다운로드
크롬 설정 페이지에서 버전 정보 확인 가능

selenium 크롤링

  • 크롬 드라이버 실행
driver = wb.Chrome()
  • 페이지 이동
// 주소를 알려주지 않으면 빈 페이지가 뜨므로 주소를 지정해야 한다
// requests 처럼 get 메소드를 사용해서 페이지의 url 입력

url = 'https://www.naver.com/'
driver.get(url)
  • 요소 지정
search = driver.find_element(By.ID, 'query')

// By.선택자는 html의 선택자와 동일하게 사용 가능하다.
  • 키보드 기능 선택
// search.send_keys(Keys.ENTER) -> 엔터 기능 실행 (Keys는 라이브러리)

search.send_keys(Keys.ENTER)
  • try except문
    JAVA의 try catch문과 같은 역할
    일단 실행한 뒤, 예외 발생시 except로 처리한 후 계속 실행한다.
try:
    // 에러가 나기 전까지 실행할 부분을 try 영역에 작성
    for i in range(15) :
        btn_more = driver.find_element(By.CLASS_NAME, 'c_05')
        btn_more.click()
except:
    // 에러가 났을 때 실행할 부분을 except 영역에 작성
    print('클릭 완료')
  • 저장 폴더 생성
// 바탕화면에 포켓몬 도감이라는 폴더 생성하기 -> os 라이브러리 사용
// 경로 작성 시 \는 이스케이프코드 이므로 \\ 로 작성하거나 / 로 바꿔야 한다

if not os.path.isdir('C:/Users/smhrd/Desktop/포켓몬도감') :
    os.mkdir('C:/Users/smhrd/Desktop/포켓몬도감') // 폴더를 생성하는 코드
    print('폴더 생성 완료')
else:
    print('이미지 폴더가 이미 존재합니다')

// os.path.isdir는 경로에 디렉토리(폴더)가 존재하는지 확인하는 기능
  • url값 파일로 변환
// urlretrieve(바꿀 값, '저장할경로/파일이름.확장자명')

urlretrieve(poke_img_list[0], 'C:/Users/smhrd/Desktop/포켓몬도감/001.jpg')
  • 스크롤 내리는 법
    방향키 ↓
    page down
    space
    end (가장 빠름)

    키보드에 있는 end키를 사용해서 스크롤 내리기 (자동 스크롤)
    --> 누구에게 부탁할까?
    화면 전체를 담당하는 body 태그에게 부탁한다

body = driver.find_element(By.CSS_SELECTOR, 'body')
for i in tq(range(20)):
    body.send_keys(Keys.END)
    time.sleep(1)
    
// body 태그를 지정한 후 반복문을 통해 END키를 사용한다.
profile
바보 개발자 지망생

0개의 댓글