반응형
파이썬 - 웹 크롤링, 동적 웹 데이터 수집 (selenium 사용법)
목차
- 동적 웹 데이터 수집을 위한 selenium 사용법
- 태그 선택 및 조작 명령어
- selenium 사용예제
- 브라우저를 띄우지 않고 데이터 수집하기
1. 동적 웹 데이터 수집을 위한 selenium 사용법
동적 웹페이지의 데이터를 수집하기 위해서는 웹브라우저상의 동작을 자동화 할 수 있는 selenium 라이브러리를 사용합니다.
1) selenium 설치방법
- pip install selenium
2) selenium 동작확인 및 기초사용법
- selenium 설치후 아래와 같이 코드를 실행하면 빈 웹브라우저 창이 나타납니다.
from selenium import webdriver
driver = webdriver.Chrome()
- 만약 위 명령어를 실행하였을 때, 웹 브라우저창이 안 뜨고 에러 발생시 아래와 같이 진행해주세요.
- 웹브라우저를 최신버전으로 업데이트 후 다시 시도해 봅니다.
- 그래도 안된다면 아래와 같이 webdriver-manager 설치후 아래의 코드를 실행해 보시기 바랍니다.
- webdriver-manager 설치 : pip install webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
3) 웹 브라우저 조작 명령어
- driver.get("https://www.naver.com") : 웹페이지 이동
- driver.page_source : 선택한 웹페이지 소스
- driver.implicitly_wait(sec) : 최대 대기시간 설정 [cf, 시간대기시 import time 후 time.sleep(1) 사용]
- dirver.set_window_size(800, 600) : 웹브라우저 창 크기 조절
- driver.execute_script("alert('안녕하세요');") : alert 창 띄우기
- driver.close() : 브라우저 닫기
- driver.quit() : 드라이버 종료 (브라우저 닫힘)
- 기타 등등
4) Chrome 드라이버 옵션
- options.add_argument('--start-maximized') : 브라우저 최대화
- options.add_argument('--window-size= 200, 300') : 브라우저 크기 지정
- options.add_argument('--start-fullscreen') : 브라우저 풀스크린모드(f11)
- options.add_argument('--blink-settings=imagesEnabled=false') : 브라우저에서 이미지 로딩 제거
- options.add_argument('--mute-audio') : 브라우저 음소거
- options.add_argument('incognito') : 브라우저 시크릿 모드 적용
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
options = webdriver.ChromeOptions() #옵션추가
options.add_argument('--start-maximized') #옵션추가
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options) #옵션추가
2. 태그선택 및 조작 명령어
selenium에서는 아래와 같이 두 가지 방식으로 내가 원하는 태그를 선택하여 명령어를 실행시킬 수 있습니다.
1) CSS_SELECTOR로 태그 선택하기
from selenium.webdriver.common.by import By
driver.get("https://www.daum.net")
driver.find_element(By.CSS_SELECTOR, '#q').send_keys('파이썬')
driver.find_element(By.CSS_SELECTOR, '.inner_search > .ico_pctop.btn_search').click()
2) XPATH로 태그 선택하기
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//*[@id="q"]').send_keys('파이썬')
driver.find_element(By.XPATH, '//*[@id="daumSearch"]/fieldset/div/div/button[3]').click()
[실행결과]
3) .find_element 조작 명령어
- .clear( ) : 글자를 지웁니다.
- .click ( ) : 요소를 클릭합니다.
- .get_attribute(name) : name 속성값 반환
- .is_displayed( ) : 해당 요소가 화면에 출력되는지 여부를 반환
- .is_enabled( ) : 해당 요소가 활성화 되어 있는지 여부를 반환
- .is_selected( ) : 해당 요 소가 선택된 상태인지 여부를 반환
- .screenshot(filename) : 화면을 캡쳐하여 저장
- .send_keys(value) : 키를 입력
- .submit( ) : 입력양식을 전송함
- .value_of_css_property(name) : name에 해당하는 css 속성값을 반환
- .id : id
- .location : 요소의 위치값 반환
- .parent : 부모요소
- .rect : 크기와 위치 정보 반환
- .screenshot_as_base64 : 스크린샷을 base64 로 반환
- .screentshot_as_png : 스크린샷을 png 형식으로 반환
- .size : 요소의 크기 반환
- .tag_name : 태그이름 반환
- .text : 해당 요소의 텍스트 내용 반환
3. selenium 사용예제
1) selenium 사용예제1
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.daum.net")
driver.find_element(By.CSS_SELECTOR, '#q').send_keys('파이썬')
driver.find_element(By.CSS_SELECTOR, '.inner_search > .ico_pctop.btn_search').click()
items = driver.find_elements(By.CSS_SELECTOR, 'a.keyword')
for item in items:
print(item.text)
2) selenium 사용예제2 (브라우저를 화면에 띄우지 않고 데이터 수집하는 방법)
- webdriver-manager 설치 : pip install webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
options = webdriver.ChromeOptions()
options.add_argument('headless')
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
driver.get('https://www.daum.net')
driver.find_element(By.CSS_SELECTOR, '#q').send_keys('파이썬')
driver.find_element(By.CSS_SELECTOR, '.inner_search > .ico_pctop.btn_search').click()
items = driver.find_elements(By.CSS_SELECTOR, 'a.keyword')
for item in items:
print(item.text)
[실행결과]
파이썬 프로그래밍
파이썬 기초
파이썬 다운로드
파이썬 뱀
파이썬 코딩
파이썬 강좌
파이썬 설치
파이썬 책
파이썬 자격증
파일썬
python
파이썬 활용
반응형