셀레늄 활용하여 크롤링하기
webdriver-manager 라이브러리를 활용하여 크롬드라이버의 지속적 업데이트 없이 크롤링 하는 법
1. 라이브러리 설치
pip install webdriver-manager
2. 셀레늄 활용 기본 코드
- 기본적으로 활용할 수 있는 코드는 아래 네 줄이다.
- drivers.get() 에 웹사이트 주소를 입력하면 된다.
- 셀레늄 코드 작성 팁 : 사람이 찾는것과 동일한 동선을 떠올리며 코드를 작성한다
# 아래 네 줄을 계속 활용하면 됨!
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
#driver.get('https://www.naver.com/')
⚡️예제 : 구글 이미지 다운로드해보기
- 필요한 라이브러리를 다운받는다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
url = 'https://www.google.co.kr/imghp'
driver.get(url)
- 이제 구글 창을 열고, '보라카이'를 검색한 다음, '검색'을 눌러 화면이 전환되는 것 까지 해보자.
- 기본적으로 구글의 '검색창'이 어떤 구조하에 존재하는지를 꼼꼼히 확인해야한다.
- 마우스 우클릭 > 검사 > 요소를 통해 확인
elem = driver.find_element(By.CSS_SELECTOR, "body > div.L3eUgb > div.o3j99.ikrT4e.om7nvf > form > div:nth-child(1) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > textarea.gLFyf")
elem.send_keys("보라카이") #구글 검색창에 보라카이 입력
elem.send_keys(Keys.RETURN) #엔터!
- 스크롤을 내리며 이미지를 확인할 수 있도록 한다.
# 스크롤내리며 이미지 쭉 확인하기
elem = driver.find_element(By.TAG_NAME, "body")
for i in range(60):
elem.send_keys(Keys.PAGE_DOWN)
time.sleep(0.1)
- 페이지를 내리며, 이미지 클릭해보기
# 이미지 클릭하기
try:
driver.find_element(By.CSS_SELECTOR, "islmp > div > div > div > div.gBPM8 > div.qvfT1 > div.YstHxe > input").click()
for i in range(60):
elem.send_keys(Keys.PAGE_DOWN)
time.sleep(0.1)
except:
pass
- 확인한 이미지 저장하기
- links 라는 리스트를 만들고, src 로 저장되어 있는 이미지를 저장하려고 한다.
- src (이미지주소) 의 이미지를 찾아 터미널에 print 되게 한다
links=[]
images = driver.find_elements(By.CSS_SELECTOR, "#islrg > div.islrc > div > a.wXeWr.islib.nfEiy > div.bRMDJf.islir > img")
for image in images:
if image.get_attribute('src') is not None:
links.append(image.get_attribute('src'))
print(' 찾은 이미지 개수:',len(links))
- urllib.request 라이브러리를 import 한 후
- 리스트의 인덱스 값과 내용을 차례로 리턴하는 enumerate 를 사용하여, 특정 경로에 이미지를 저장할 수 있도록 한다
- 이미지가 저장되면 다운로드 완료 여부를 알 수 있는 멘트가 print 되도록한다.
- 메모리 과부하 방지를 위해 driver.quit() 잊지말자!
import urllib.request
for k, i in enumerate(links):
url = i
urllib.request.urlretrieve(url, "./images/"+str(k)+".jpg")
print('다운로드 완료하였습니다.')
driver.quit()
👉 결과 확인
728x90
'Programming Basics' 카테고리의 다른 글
XPath란 (0) | 2023.08.08 |
---|---|
[크롤링] 셀레늄(selenium) 활용 ; nate 검색어 1위부터 10까지 가져오기(동적화면에서의 크롤링) (0) | 2023.08.08 |
[웹 크롤링] 주식 일별 시세를 데이터프레임으로 저장하기 (0) | 2023.08.05 |
[웹 크롤링] 네이버 증권에서 '종목코드', '상장회사', '주가' 크롤링하기 (0) | 2023.08.04 |
[웹 크롤링] 벅스에서 Top 100 노래 제목 크롤링하기 (0) | 2023.08.04 |