파이썬 웹 크롤링 selenium - paisseon web keulolling selenium

[왕초보 웹크롤링 따라하기] 웹크롤링, 파이썬, 웹자동화, 셀레니움, Selenium


#12 동적 웹페이지 크롤링


정적/동적 사이트의 이해 (바로가기 Click)

동작 자동화, 셀레니움(selenum) (바로가기 Click)


웹 상의 텍스트를 불러와 표로 뽑아내는 스킬은 충분히 익혔다. 방대한 데이터를 코드 몇개로 뽑아낼 수 있으니 나름의 자동화인가...? 뭔가.. 자동화라고 하기엔 많이 부족한 느낌이다. 지금까지는 기초! 본격적인 자동화에 앞서 기본을 닦은 것이다. 이제 본격적으로 웹크롤링의 동작 자동화를 익힐 시간이다. 동작 자동화를 익히기 전, 알고가야할 배경 지식이 있다. 바로 정적 페이지동적 페이지다.

  정적/동적 사이트의 이해

정적 페이지는 인터넷에 접속하면 페이지의 모든 정보가 업로드 된다. 아무런 추가 작업 없이 html을 불러오면 그 안에 모든 데이터를 추출할 수 있다. 반면, 동적 페이지는 페이지 내에서 사용자가 특정한 동작을 해야만 추가적인 정보가 업데이트 된다. 클릭, 스크롤, 로그인 등의 동작을 말한다. 원하는 정보를 얻기 위해 특정한 동작을 해야만 html에 해당 데이터가 갱신되는 것이다.

사용자의 동작에 따라 html의 데이터가 변하기 때문에 url만 불러오는 기존의 방식으로는 원하는 데이터를 추출할 수 없다. 즉, 동적 페이지의 데이터를 추출하기 위해서는 사용자의 동작(스크롤, 클릭, 로그인 등)을 프로그램이 자동으로 수행하도록 만들어 줘야한다.


인스타그램을 예로 들 수 있는데, 스크롤을 내려야 새로운 피드가 업데이트 되고 마우스를 올리면 좋아요와 댓글 수가 보여지고 클릭을 해야 피드가 열리게 된다. 이처럼 웹브라우저 상에서 보이는 정보를 html에서 정보를 찾을 수 없을 때, 특정한 행동 이후 정보가 보여질 때, 보여지는 창이 바뀌었는데 url이 변하지 않을 때 동적 페이지일 가능성이 크다.

파이썬 웹 크롤링 selenium - paisseon web keulolling selenium
파이썬 웹 크롤링 selenium - paisseon web keulolling selenium

인스타그램은 동적 페이지로 클릭, 스크롤 등을 해야만 정보가 보여진다.

  동작 자동화, 셀레니움(selenium)

동적 페이지에서 데이터를 추출하기 위해서는 추출하고자 하는 데이터의 html이 갱신되는데 필요한 동작을 실행시켜줘야 한다. 파이썬을 통해 동작을 자동으로 실행 시키기 위해서는 2가지가 필요하다. 동작 자동화 주문 셀레니움과 웹 제어도구 웹 드라이버이다. 셀리네움으로 동작을 지시하면 웹 드라이버에서 동작을 수행하는 것이다.


동작 자동화를 위해 셀레니움과 웹드라이버를 설치해주자.

파이썬 웹 크롤링 selenium - paisseon web keulolling selenium
1. 파이참의 Terminal 창을 열어 셀레니움을 설치. pip3 install selenium
파이썬 웹 크롤링 selenium - paisseon web keulolling selenium
2. 웹드라이버 버전 확인. 브라우저 우측상단 메뉴 버튼 - 도움말 - Chrome 정보 클릭 / url : chrome://settings/help
파이썬 웹 크롤링 selenium - paisseon web keulolling selenium
3. 버전에 맞는 드라이버 선택. 크롬 드라이버 설치 페이지 :  https://sites.google.com/a/chromium.org/chromedriver/downloads
파이썬 웹 크롤링 selenium - paisseon web keulolling selenium
4. 파일을 꼭 Windows 폴더에 설치! 그렇지 않으면 셀레니움을 실행할 때마다 chromedriver 경로를 적어줘야 한다.

준비를 다 마쳤으니 코드를 짜서 웹 브라우저가 정상적으로 작동하는지 확인해 보자.

from selenium import webdriver  # 셀레니움을 활성화

dr = webdriver.Chrome()  # 크롬 드라이버를 실행하는 명령어를 dr로 지정
dr.get('~url~')  # 드라이버를 통해 url의 웹 페이지를 오픈
파이썬 웹 크롤링 selenium - paisseon web keulolling selenium
코드를 실행하고 url의 웹페이지가 자동으로 열리면 성공!

이제 동작 시키고자 하는 html 요소를 선택하고, 동작 메소드를 지정하면 해당 동작을 자동으로 실행된다. 

동작 메소드를 사용하기 위해서는 액션체인(ActionChains) 모듈도 활성화 해줘야 한다.

from selenium import webdriver
from selenium.webdriver import ActionChains  # 액션체인 활성화

dr = webdriver.Chrome()
dr.get('~url~')

act = ActionChains(dr)  # 드라이버에 동작을 실행시키는 명령어를 act로 지정


### 예시 ###
element1 = dr.find_element_by_css_selector('선택자')  # 동작 할 요소 선택
act.click(element1).perform()  # element1  클릭 동작을 수행

추출한 각 요소를 지정하여 동작 제어를 할 수도 있고, 액션체인을 이용해 각 요소들의 동작의 순서를 정하여 실행 시킬 수도 있다. 코드를 짜기 앞서 주로 사용되는 메소드만 살짝 알아보자.

▼ html 요소 선택 메소드

요소 선택 기준 처음 1개 요소 추출  .find_element 모든 요소 추출 .find_elements
css선택자가 ''인 요소 추출  .find_element_by_css_selector('')  .find_elements_by_css_selector('') 
 id가 ''인 요소추출   .find_element_by_id('') .find_elements_by_id('')
class가 ''인 요소 추출 .find_element_by_class_name('')    .find_elements_by_class_name('')   
tag가 ''인 요소 추출 .find_element_by_tag_name('')    .find_elements_by_tag_name('')   
xpaht가 ''인 요소 추출 .find_element_by_xpath('') .find_elements_by_xpath('')

▼ 동작 메소드

동작 코드
'요소' 클릭 .click('')   
'요소' 더블 클릭 .double_click('')   
'텍스트' 입력 .send_keys('')  
'요소'에 '텍스트' 입력 .send_keys_to_element('','')  
'요소'로 마우스 이동 .move_to_element('')
스크롤 내리기 .execute_script("window.scrollto();")
실행 .perform()

▼다음글 이어보기▼

[ep01:웹크롤링] #12 인스타그램 로그인하기(브라우저 크기 설정/셀레니움) with 파이썬

[왕초보 웹크롤링 따라하기] 웹 제어, 브라우저 크기 설정, 셀레니움, Selenium, 로그인, 텍스트 입력, 클릭, 요소 찾기, 경로 찾기. 업무지옥을 탈출한 건에 대하여(feat.업무자동화) #12 인스타그램

charimlab.tistory.com

파이썬 웹 크롤링 selenium - paisseon web keulolling selenium