ABOUT ME

IT와 컴퓨터 관련 팁, 파이썬 등과 아파트 정보, 일상적인 경험 등의 생활 정보를 정리해서 올리는 개인 블로그

  • 파이썬 크롤링(Crawling) - 셀레니움(Selenium) 연습 #1
    코딩 연습/코딩배우기 2020. 11. 9. 22:46

     

    ■ 셀레니움(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동 진상부부
    어쩌면 마왕이 더 힘들지도 모릅니다
    부사관 후보생, 유아미!
    쓰레기 성의 소녀
    포 어 베러월드
    대표님 저 결혼했어요
    열화광비
    네크로망스
    네크로망스 [단행본]
    마황의 귀환
    무련전봉

     

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

     

Designed by goodthings4me.