브라우저를 자동제어하여 크롤링을 자동화시키는 라이브러리이다. 동적 크롤링을 진행할 때 사용된다. 사용하기 위해서는 반드시 설치를 해야한다.
라이브러리 설치
!pip install selenium
Selenium 최신버전 업그레이드
!pip install -U selenium
브라우저 역할을 해주는 라이브러리
from selenium import webdriver as wb
#컴퓨터용 키보드역할
from selenium.webdriver.common.keys import Keys
#선택자의 구분자 역할
from selenium.webdriver.common.by import By
wb.Chrome()
#웹드라이버야 크롬을 실행해줘!
변수 설정
driver = wb.Chrome()
driver.get('http://www.naver.com')
검색창의 위치를 알아온다.
#query
driver.find_element
id는 하나일 뿐더러 우리가 필요한 검색창은 한 개기 때문에 element를 사용하고, 구분자 역할을 해주는 라이브러리 by를 써서 구분한다.
search = driver.find_element(By.ID,"query")
#By + tab
Keys 라이브러리를 이용하여 컴퓨터가 직접 검색창에 입력하도록 설정
search.send_keys("이강인")
Keys 라이브러리를 이용하여 컴퓨터가 엔터를 누르도록 설정
search.send_keys(Keys.ENTER)
화면 밑에 있는 데이터도 로딩하여 데이터 수집하기 위해서 키보드에 있는 End키를 보내주어야 한다.
화면 이동
END = 페이지 맨 아래로 이동
HOME = 페이지 맨 위로 이동
PAGE_DOWN = 스크롤 다운
PAGE_UP = 스크롤 업
최하단으로 가기 위해서 <body>
태그에 End키를 보내자.
body = driver.find_element(By.TAG_NAME,"body")
body.send_keys(Keys.END)
driver.back()
#뒤로가기 버튼은 html태그가 아니다.
search.send_keys("김민재")
#StaleElementReferenceException Traceback (most #recent call last)
#Cell In[23], line 1
#----> 1 search.send_keys("김민재")
화면이 이동했다면 컴퓨터는 과거 화면을 다 잊어버린다. 반드시 요소를 새로 검색 후 새로 명령을 부여해야 한다.
search = driver.find_element(By.ID,"query")
search.send_keys("김민재")
btn = driver.find_element(By.CLASS_NAME,"btn_search")
btn.click()
driver.quit()
클라이언트가 서버에게 무리한 요청을 하면 서버는 부하를 느끼게 되고, 아이피 차단을 당할 수 있다.
import time
time.sleep(5) #5초간 쉬어라
요청과 응답 사이에 time함수를 사용한다. 일반적으로 클릭 이후에 time.sleep()
을 사용한다.
try:
for i in range(15):
btn = driver.find_element(By.CSS_SELECTOR,".c_05")
btn.click()
time.sleep(5)
except :
print("더보기가 없습니다.")