selenium
- `https://www.selenium.dev`
- 자동화를 목적으로 만들어진 다양한 브라우져와 언어를 지원하는 라이브러리
- 크롬 브라우져 설치
- 크롬 브라우져 드라이버 다운로드 (크롬 브라우져와 같은 버전)
- 다운로드한 드라이버 압축 해제
- chromedriver, chromedriver.exe 생성
- windows : 주피터 노트북 파일과 동일한 디렉토리에 chromedriver.exe 파일 업로드
- mac : sudo cp ~/Download/chromedirver /usr/local/bin
# install selenium
# !pip install selenium
다루는법 기본
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome() # 시작
# 페이지 이동
driver.get("https://daum.net")
# 브라우져 사이즈 조절
driver.set_window_size(200, 600)
# 브라우져 스크롤 조절
driver.execute_script("window.scrollTo(200, 300);")
# alert 다루기
driver.execute_script("alert('hello selenium!!!');")
alert = driver.switch_to.alert
alert.accept()
!pip list | grep selenium # grep 명령어는 특정 문자열을 찾아줍니다 (pip list에서 selenium을 찾기위해 사용한 것 같음)
Class, ID 등등 삽입방법
# 문자열 입력
driver.find_element(By.CSS_SELECTOR, "#q").send_keys("셀레니움")
# 검색 버튼 클릭
driver.find_element(By.CSS_SELECTOR, '.inner_search > .ico_pctop.btn_search').click()
# 브라우져 종료
driver.quit()
텍스트 데이터 가져오기
- TED 사이트 : `https://www.ted.com`
# 브라우져를 실행하여 테드 사이트 열기
driver = webdriver.Chrome()
driver.get("https://www.ted.com/talks")
# CSS Selector를 이용하여 HTML 태그와 태그 사이의 text 데이터 가져오기
driver.find_element(By.CSS_SELECTOR, "#banner-secondary").text
# 제목 데이터 가져오기
contents = driver.find_elements(By.CSS_SELECTOR, "#browse-results > .row > .col")
len(contents)
# 가장 처음 텍스트 데이터 가져오기
contents[0].find_element(By.CSS_SELECTOR, '.media__message .ga-link').text
# 전체 제목 데이터 가져오기
titles = []
for content in contents:
title = content.find_element(By.CSS_SELECTOR, '.media__message .ga-link').text
titles.append(title)
titles[:3], len(titles)
# 셀렉트 박스를 선택후 데이터 가져오기
# 이벤트 발생 기능(값 입력, 클릭 이벤트등)은 화면에 해당 엘리먼트가 보여야 합니다.
# 한국어 선택
driver.find_element(By.CSS_SELECTOR, '#languages [lang="ko"]').click()
# 전체 제목 데이터 가져오기
contents = driver.find_elements(By.CSS_SELECTOR, "#browse-results > .row > .col")
titles = []
for content in contents:
title = content.find_element(By.CSS_SELECTOR, '.media__message .ga-link').text
titles.append(title)
titles[-3:]
# 링크 데이터 크롤링 (속성(attribute)값 가져오는 방법)
links = []
for content in contents:
link = content.find_element(By.CSS_SELECTOR, '.media__message .ga-link').get_attribute("href")
links.append(link)
links[-3:]
driver.quit()
Headless
- 브라우져를 화면에 띄우지 않고 메모리상에서만 올려서 크롤링하는 방법
- window가 지원되지 않는 환경에서 사용이 가능
- chrome version 60.0.0.0 이상부터 지원 합니다.
# 현재 사용중인 크롬 버전 확인
driver = webdriver.Chrome()
version = driver.capabilities["browserVersion"]
print(version)
driver.quit()
# headless 사용
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(options=options)
driver.get("https://www.ted.com/talks")
text = driver.find_element(By.CSS_SELECTOR, "#banner-secondary").text
driver.quit()
print(text)
'Python > Web Crawling' 카테고리의 다른 글
007-1 실습, xpath 사용 (0) | 2023.03.28 |
---|---|
006-2 실습, Selenium (네이버 중고나라 게시글 데이터 수집) (1) | 2023.03.28 |
006-1 실습, Gmarket 상품 데이터 수집 (+ 이미지) (0) | 2023.03.26 |
005-1 실습, 네이버 연관 검색어 수집 (0) | 2023.03.26 |
005-0 개념, CSS Selector (0) | 2023.03.26 |