Selenium 동적 크롤링 - Selenium dongjeog keulolling

사장님 몰래 하는 파이썬 업무자동화(부제 : 들키면 일 많아짐) Ch0. 책 소개(집필 목적) 출간 계약 후, 작성중인 저서입니다. Ch2. 목차 및 간략 소개 1-1. 변경 이력 1-2. 책 활용 방법 1-3. 업무자동화 소개(RPA) Ch2. 개발환경 구축 2-1. 파이썬 설치(Anaconda) 2-2. IDE란? 2-3. VS CODE 설치 2-4. VS CODE 사용법 (기초) 2-5. VS CODE 사용법 (디버깅) Ch3. 업무자동화 관련 패키지 3-1. Excel - OpenPyxl 소개 1) 엑셀의 구성요소 2) WorkBook, WorkSheet 객체 설정하기 3) Cell 데이터 읽기/쓰기/삭제 4) rows, columns 속성 이해하기 5) 엑셀 함수 쓰기 - max_row, max_column 속성의 이해 6) 엑셀 서식 지정하기 - 기본 7) 엑셀 서식 지정하기 - 조건부 서식 8) WorkSheet(=Sheet) 조작하기 3-2. Excel - xlwings 소개 1) 엑셀 VBA(Visual Basic for Applicaiton) 소개 2) xlwings 설치 및 Excel 환경설정하기 3) VBA에서 파이썬 코드 실행시키기 4) 파이썬에서 VBA 코드 실행시키기 3-3. Win32com (pywin32) 1) win32com 소개 및 설치 방법 2) win32com 통해 엑셀 다루기 - Cell 데이터 읽기/쓰기 3) win32com 통해 엑셀 다루기 - Cell 영역을 선택하는 방법 4) win32com 통해 엑셀 다루기 - Sheet 제어 5) win32com 통해 엑셀 다루기 - 엑셀 서식 지정 6) win32com 통해 엑셀 다루기 - 차트 7) win32com 통해 엑셀 다루기 - 파일 저장 옵션 9) win32com 통해 전자메일(Outlook) 다루기 3-4. Word문서 자동화 (python-docx) 1) 문서 생성, 저장, 불러오기, 글자 입력 2) 이미지 삽입, 표 삽입 3) 기존문서 내용 읽기 4) 글자 폰트, 크기, 색깔 변경 5) 문단 정렬, 표 셀 정렬 3-5. 파일과 폴더 다루기 1) 경로(path)와 디렉토리(directory) 2) 절대 경로와 상대 경로 3) os 모듈 4) glob 모듈 5) shutil 모듈 3-6. 이미지 처리 1) Pillow 설치 및 이미지 불러오기 2) 이미지 편집(resize,crop,rotate,flip) 3) 이미지 필터 효과(흑백, 블러, 엣지) 4) 이미지 워터마크(텍스트) 5) 이미지 엑셀에 삽입 3-7. PyAutoGUI 모듈 1) 마우스 조작하기 2) 키보드 조작하기 3) 화면 이미지 인식하기 4) 메시지 박스 띄우기 3-8. 웹크롤링 1) 크롬과 크롬 드라이버 2) 속성 HTML/CSS 강의 3) 동적/정적 웹 페이지 4) 정적 웹크롤링 - request / beautifulsoup 5) 정적 웹크롤링 - 텍스트, 하이퍼링크, 이미지 가져오기 6) 동적 웹크롤링 - selenium 소개 및 기초사용법 7) 동적 웹크롤링 - selenium으로 화면 조작하기 8) 동적 웹크롤링 - 텍스트, 하이퍼링크, 이미지 가져오기 3-9. 기타 유용한 패키지 1) zipfile 압축/해제 2) exe 파일 배포 3) 원하는 시간마다 파이썬 자동 실행 4) PDF 다루기 Ch4. 업무자동화 프로젝트 사례 - 작성중 Outlook 첨부 엑셀 파일 데이터 자동 취합하기 개별 파일의 엑셀 시트 새 파일에 취합하기 네이버뉴스 댓글 수집해서 엑셀로 저장하기 실시간으로 네이버 뉴스를 텔레그램으로 전송받기 엑셀 시트를 개별 파일로 분리하기 엑셀 시트별 PDF 자동 저장하기 엑셀의 교육자 명단을 참조하여 수료증(워드) 자동 작성하기

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


#12 동적 웹페이지 크롤링


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

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


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

  정적/동적 사이트의 이해

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

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


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

Selenium 동적 크롤링 - Selenium dongjeog keulolling
Selenium 동적 크롤링 - Selenium dongjeog keulolling

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

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

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


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

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

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

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

dr = webdriver.Chrome()  # 크롬 드라이버를 실행하는 명령어를 dr로 지정
dr.get('~url~')  # 드라이버를 통해 url의 웹 페이지를 오픈
Selenium 동적 크롤링 - Selenium dongjeog keulolling
코드를 실행하고 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 동적 크롤링 - Selenium dongjeog keulolling