본문 바로가기
코딩 연습/코딩배우기

파이썬 크롤링(Crawling) - 셀레니움(Selenium) 연습 #1

by good4me 2020. 11. 9.

goodthings4me.tistory.com

 

■ 셀레니움(Selenium)이란?

o 셀레니움(Selenium)은 웹사이트 테스트 목적으로 나옴

o 웹브라우저 컨트롤, 동작 제어, 자동화 등 가능(사람이 접속하는 것처럼)

o pip install selenium (selenium 설치)

o 웹드라이버 설치 --> 셀레니움이 웹드라이버 제어 --> 웹드라이버를 통해 브라우저 제어 
  (Webdriver를 가지고 자동으로 크롬 Open, Control)

o 셀레니움 크롬드라이버 다운로드
  - 사이트 : https://sites.google.com/a/chromium.org/chromedriver/downloads
  - 크롬드라이버를 크롬 버전에 맞춰서 받아야 한다.
  - 크롬 버전 확인은 크롬 주소창에 "Chrome://version" 입력하여 확인한다.
  - 운영체제에 맞는 파일 다운로드(Windows의 경우 32/64비트 상관없음)
  - chromedriver.exe 파일 위치를 기억한다.(파일의 속성에서 위치를 보면 됨)
    (예로, C:/Temp/chromedriver.exe 처럼 임의의 폴더에 위치시켜 사용 가능함)

 

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')  ## 브라우저 안뜨게
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

wd = webdriver.Chrome('C:/Temp/chromedriver.exe', options = chrome_options) 

print(type(wd))
# <class 'selenium.webdriver.chrome.webdriver.WebDriver'>

url = 'http://suanlab.com/'
wd.get(url)
#wd.get_screenshot_as_file('suanlab.png')  ## 이미지 캡쳐 (필요시 활용)

label_tags = wd.find_elements_by_tag_name('label')  ## list
#print(label_tags)
#[<selenium.webdriver.remote.webelement.WebElement (session="cb3ff011d01898debe3550d0ef7ddab7", 
#element="9bbbc029-3213-4363-91ec-539cbdfa690b")>, 

for label in label_tags:
    print(label.text)

    
## CSS Selector 사용할 경우,
for label in wd.find_elements_by_css_selector('#wrapper > section > div > div > div > div > div > label'):
    print(label.text)


toggle_class = wd.find_element_by_css_selector('#wrapper > section > div > div > div > div')
## toggle이 부모 태그의 속성에도 있을 경우, 부모태그 기준으로 한 번 지정 후, 사용
for label in toggle_class.find_elements_by_class_name('toggle'):
    print(label.text)


## CSS Selector 중 xpath 사용할 경우,
for label in wd.find_elements_by_xpath('//*[@id="wrapper"]/section/div/div/div/div/div/label'):
    print(label.text)


## webdriver.common.by 사용 시,
    
from selenium.webdriver.common.by import By

for label in wd.find_elements(By.TAG_NAME, 'label'):
    print(label.text)

for label in wd.find_elements(By.CSS_SELECTOR, '#wrapper > section > div > div > div > div > div > label'):
    print(label.text)

[위 예시의 실행 결과]

[2020-05-20] "인공지능의 보안 위협" 칼럼
[2020-03-04] "데이터 경제 시대" 칼럼
[2019-12-25] "마이데이터 시대의 도래 데이터 주권과 새로운 가치" 칼럼
[2019-09-25] "유튜브 탄생과 크리에이터 시대" 칼럼
[2019-09-04] "농업으로 들어간 인공지능" 칼럼
[2019-08-07] "AI시대 지배할 것인가 지배당하며 살 것인가" 칼럼
[2018-12-30] "파이썬으로 텍스트 분석하기" 책 출판

 

good4me.co.kr

 

네이버 웹툰(Webtoon) 제목 추출하기 - 셀레니움(Selenium) 사용

from selenium import webdriver
import time

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')

wd = webdriver.Chrome('C:/Temp/chromedriver.exe', options = chrome_options)

url = 'https://comic.naver.com/index.nhn'
wd.get(url)

for title in wd.find_elements_by_class_name('title'):
    print(title.text)



[실행 결과]

부산스런 웹툰
오늘의 순정망화
인생존망
서브 콤플렉스
칼가는 소녀
컷툰
독립일기
20&21세기남매
하나리즈
더리틀피오니스
이래서 애들은
158동 진상부부
어쩌면 마왕이 더 힘들지도 모릅니다
부사관 후보생, 유아미!
쓰레기 성의 소녀
포 어 베러월드
대표님 저 결혼했어요
열화광비
네크로망스
네크로망스 [단행본]
마황의 귀환
무련전봉

 

[참고] 이수안컴퓨터연구소

 

댓글