데이터분석(파이썬)

동적 웹크롤링 (Selenium, Cromedriver)

Dean83 2023. 4. 10. 09:16

1. 개요

    - url 이 변경되는 형태가 아닌, script로 동작하는 웹페이지의 데이터를 크롤링 하는 방법을 말한다.

       대부분의 웹페이지에 해당 된다고 생각된다.

 

    - 마우스 클릭, 스크롤 등 동작을 프로그래밍 하여 임의로 수행하고 해당 결과값을

      가져오는 방식이다. 페이지 로딩 등에 시간이 걸리므로 타이머를 적절하게 배치해야 한다. 

 

    - 이전 페이지에서 본 beautifulsoap을 사용치 않고 selenium 과 chromedriver 를 사용한다. 

    - chromedriver 는 https://chromedriver.chromium.org/downloads 여기서 다운로드 가능하다.

      위치는 소스코드 위치에 두든, 원하는 위치에 둬도 상관없고, 호출시 경로만 잘 적어주면 된다.

 

 

2. 사용법

    - chromedriver 를 import

    - chromedriver 를 통해 웹페이지 이동

    - 마우스 클릭등 이벤트 이전에 필요할 경우 time.sleep 적용

    - 마우스 클릭등 이벤트로 호출되는 스크립트 실행 (execute_script('스크립트 코드')) 
       - 크롬 브라우저에서 F12를 통해 호출해야 할 스크립트 확인 필요. 

    - 결과값에서 필요한 항목을 find 하여 추출

from selenium import webdriver
import time
from selenium.webdriver.common.by import By

driver = webdriver.Chrome('chromedriver')
driver.get('사이트 주소')
time.sleep(2)
driver.execute_script('스크립트 호출 코드')
time.sleep(2)

  

* execute_script 를 통해 페이지 끝까지 스크롤링 하기

   - driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')

      -> 0부터 끝까지 스크롤을 한다는 의미이고, 한번에 동작을 잘 안할 수도 있으므로 반복문으로 몇번 반복하는게 좋다.

    for scroll in range(7):
        driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
        time.sleep(0.5)

 

2.1 항목 찾기, 클릭 이벤트 등

      - driver.find_elements 혹은 find_element를 통해 html 소스 검색을 함. (web element 형)
         - 1번째 인자값에 By.XPATH , By.TAG_NAME, By.CLASS_NAME 등 을 통해 조건을 주고,

         - 2번째 인자값에 문자열로 찾을 항목을 넘겨준다

 

     - get_attribute 혹은 .text 로 실제 데이터 추출
       - get_attribute 함수 인자값으로 attribute 명

 

     - .click 혹은 send_keys 를 통해 상호작용
       - .click() 함수는 마우스 클릭

       - send_keys 는 키 입력 이벤트 이다. 

변수1 = driver.find_element(By.XPATH,'찾을 문자열')
변수2 = sido.find_elements(By.TAG_NAME,'찾을 문자열')

변수2.send_keys('보낼 키값')
변수2.click()
# .text 로 텍스트 전체를 가져올 수 있다.
변수2.text 

배열변수명 = []
for item in 변수2:
    val = item.get_attribute('찾을 문자열')
    if(val == ''):
        continue
        
    배열변수명.append(val)
    
    ....

 

'데이터분석(파이썬)' 카테고리의 다른 글

EDA (Exploratory Data Analysis)  (0) 2023.04.10
Pandas  (0) 2023.04.10
정적 페이지 크롤링 (beautifulsoap4)  (0) 2023.04.07
웹 크롤링 기획 기본  (0) 2023.04.07
데이터 분석 개요  (0) 2023.04.07