크롤링

나 안해·2023년 3월 7일
0

basic

목록 보기
4/8

1. 준비

1.1 셀레니움 설치

pip3 install selenium

1.2 웹 드라이버 설치

  • ctrl + Pg Up이나 메뉴-도움말-브라우저 정보(예: 크롬 정보)에서 웹드라이버 버전 확인 후 버전에 맞는 드라이버 설치

    크롬 버전을 변경하고 싶은 경우

  • 압축 풀기 (반드시 아래 경로에 압축풀기)

    해당 경로가 아닌 곳에 풀어줄 경우 셀레니움 실행할 때마다 드라이버 경로를 적어줘야 한다.

2. 크롤링

2.1 코드

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import urllib.request
import os

search = "검색어"  
count = 크롤링할 이미지 수  
saveurl = "이미지를 저장할 폴더"  

## 셀레니움으로 구글 이미지 접속 후 이미지 검색

options = webdriver.ChromeOptions()
options.headless = True
options.add_argument("window-size=1920x1080")

driver = webdriver.Chrome('chromedriver.exe의 경로')  # options=options
driver.get("크롤링하고자하는 주소")
elem = driver.find_element(By.NAME, "q")
elem.send_keys(search)

elem.send_keys(Keys.RETURN)

# 페이지 끝까지 스크롤
SCROLL_PAUSE_TIME = 10
# 스크롤 깊이 측정하기
last_height = driver.execute_script("return document.body.scrollHeight")

# 끝까지 스크롤 

while True:

    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 페이지 로딩 대기
    time.sleep(SCROLL_PAUSE_TIME)
    # 더 보기 요소 있을 경우 클릭하기

    new_height = driver.execute_script("return document.body.scrollHeight")

    if new_height == last_height:

        try:
            driver.find_element(By.CSS_SELECTOR, ".mye4qd").click()

        except:
            break

    last_height = new_height

# 이미지 찾고 다운
images = driver.find_elements(By.CSS_SELECTOR, ".rg_i.Q4LuWd")

for i in range(count):

    try:
        images[i].click()  # 이미지 클릭
        time.sleep(1)

        imgUrl = driver.find_element(By.CSS_SELECTOR, ".n3VNCb").get_attribute("src")
        urllib.request.urlretrieve(imgUrl, saveurl + str(i) + ".jpg")  # 이미지 다운

    except:
        pass
driver.close()

2.2 변경사항

  • 기존에 driver.find_element_by_name("q")driver.find_element(By.NAME, "q")로 변경

Errors

01. selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.

원인

  • 크롬 드라이버의 경로를 제대로 읽어오지 못해서 발생한 문제

해결

  • 드라이버 경로를 절대경로로 잡아준다

0개의 댓글