[왕초보 웹크롤링 따라하기] 웹크롤링, 파이썬, 웹자동화, 셀레니움, Selenium
#12 동적 웹페이지 크롤링
동작 자동화, 셀레니움(selenum) (바로가기 Click)
웹 상의 텍스트를 불러와 표로 뽑아내는 스킬은 충분히 익혔다. 방대한 데이터를 코드 몇개로 뽑아낼 수 있으니 나름의 자동화인가...? 뭔가.. 자동화라고 하기엔 많이 부족한 느낌이다. 지금까지는 기초! 본격적인 자동화에 앞서 기본을 닦은 것이다. 이제 본격적으로 웹크롤링의 동작 자동화를 익힐 시간이다. 동작 자동화를 익히기 전, 알고가야할 배경 지식이 있다. 바로 정적 페이지와 동적 페이지다.
정적/동적 사이트의 이해
정적 페이지는 인터넷에 접속하면 페이지의 모든 정보가 업로드 된다. 아무런 추가 작업 없이 html을 불러오면 그 안에 모든 데이터를 추출할 수 있다. 반면, 동적 페이지는 페이지 내에서 사용자가 특정한 동작을 해야만 추가적인 정보가 업데이트 된다. 클릭, 스크롤, 로그인 등의 동작을 말한다. 원하는 정보를 얻기 위해 특정한 동작을 해야만 html에 해당 데이터가 갱신되는 것이다.
사용자의 동작에 따라 html의 데이터가 변하기 때문에 url만 불러오는 기존의 방식으로는 원하는 데이터를 추출할 수 없다. 즉, 동적 페이지의 데이터를 추출하기 위해서는 사용자의 동작(스크롤, 클릭, 로그인 등)을 프로그램이 자동으로 수행하도록 만들어 줘야한다.
인스타그램을 예로 들 수 있는데, 스크롤을 내려야 새로운 피드가 업데이트 되고 마우스를 올리면 좋아요와 댓글 수가 보여지고 클릭을 해야 피드가 열리게 된다. 이처럼 웹브라우저 상에서 보이는 정보를 html에서 정보를 찾을 수 없을 때, 특정한 행동 이후 정보가 보여질 때, 보여지는 창이 바뀌었는데 url이 변하지 않을 때 동적 페이지일 가능성이 크다.
동작 자동화, 셀레니움(selenium)
동적 페이지에서 데이터를 추출하기 위해서는 추출하고자 하는 데이터의 html이 갱신되는데 필요한 동작을 실행시켜줘야 한다. 파이썬을 통해 동작을 자동으로 실행 시키기 위해서는 2가지가 필요하다. 동작 자동화 주문 셀레니움과 웹 제어도구 웹 드라이버이다. 셀리네움으로 동작을 지시하면 웹 드라이버에서 동작을 수행하는 것이다.
동작 자동화를 위해 셀레니움과 웹드라이버를 설치해주자.
준비를 다 마쳤으니 코드를 짜서 웹 브라우저가 정상적으로 작동하는지 확인해 보자.
from selenium import webdriver # 셀레니움을 활성화
dr = webdriver.Chrome() # 크롬 드라이버를 실행하는 명령어를 dr로 지정
dr.get('~url~') # 드라이버를 통해 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() |
▼다음글 이어보기▼
'데이터 스킬업 > 웹크롤링' 카테고리의 다른 글
[파이썬:웹크롤링] #14 인스타그램 좋아요 수 크롤링(마우스오버/텍스트 추출) with move_to_element() (0) | 2022.06.12 |
---|---|
[파이썬:웹크롤링] #13 인스타그램 로그인하기 with Selenium (1) | 2022.06.12 |
[파이썬:웹크롤링] #11 쇼핑몰 제품정보/평점/리뷰수 리스트업 (0) | 2022.06.12 |
[파이썬:웹크롤링] #10 쥬피터노트북 dataframe 만들기 with Pandas (0) | 2022.06.12 |
[파이썬: 웹크롤링] #09 리스트로 데이터프레임(DataFrame) 만들기 with Pandas (0) | 2022.06.12 |
댓글