×

    관리자 권한(sudo) 없이 selenium 스크래핑(feat headless-chromium)

    배경

    selenium은 브라우저를 자동으로 컨트롤 하는 대표적인 library이다. 스크래핑(Scraping)은 크롤링(crawling)이라고도 하며, 웹에 있는 자료를 자동으로 추출하는 기술이다.

    selenium과 web browser 그리고 python을 이용하면 웹에 있는 자료들을 자동으로 추출할 수 있다. 이를 위해서는 사용하는 컴퓨터에 python, selenium, 그리고 web browser가 설치되어 있어야 한다.

    목적

    최근 분석을 위해 서버를 대여 받았는데, 이 서버에는 분석을 위해 anaconda python이 설치되어 있었지만 관리자 권한(이하 sudo)은 주어지지 않았다. 이 서버에서 웹 상의 데이터를 수집하려면 어떻게 해야 할지 고민을 좀 해 보았다.

    방법

    다행스럽게 serverless 환경에서 사용할 수 있도록 배포된 chromium binary file을 알게 되었고, 이를 무설치 web browser로 이용할 수 있을 것 같았다.

    일단 웹 페이지 스냅샷을 성공하였기에 그 방법을 정리해 본다. 여기에서는 anaconda python 환경을 중심으로 설명한다.

    python 환경 만들기

    먼저 프로젝트 환경을 만들어 보자. 이 과정은 생략해도 좋다.

    conda create -n selenium python=3.6
    conda activate selenium
    

    selenium 설치

    다음으로 selenium을 설치한다.

    conda install selenium
    

    chromium binary & webdriver 설치

    마지막으로 serverless headless-chromium binary file과 webdriver 파일을 원하는 위치에 저장한다. 여기에서는 ./TOOL에 저장한다고 가정한다.

    cd TOOL
    
    # Download Chrome Webdrive
    curl -SL https://chromedriver.storage.googleapis.com/2.42/chromedriver_linux64.zip > chromedriver.zip
    unzip chromedriver.zip
    rm ./chromedriver.zip
    
    # Download Headless-Chromium for Serverless env
    curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-55/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip
    unzip headless-chromium.zip
    rm ./headless-chromium.zip
    
    cd ..
    

    Scraping Code

    이제 selenium_test.py라는 간단한 프로그램을 작성하고 실행시켜 보자.

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.chrome.options import Options
    from time import sleep 
    
    options = Options()
    options.add_argument("--headless")
    options.add_argument("--disable-gpu")
    options.add_argument("--window-size=1280x1696")
    options.add_argument("--disable-application-cache")
    options.add_argument("--disable-infobars")
    options.add_argument("--no-sandbox")
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument("--hide-scrollbars")
    options.add_argument("--enable-logging")
    options.add_argument("--log-level=0")
    options.add_argument("--single-process")
    options.add_argument("--ignore-certificate-errors")
    options.add_argument("--homedir=./TMP")
    
    options.binary_location = "./TOOL/headless-chromium"
    chromedriver_path = "./TOOL/chromedriver"
    
    driver = webdriver.Chrome(chrome_options=options, executable_path=chromedriver_path )
    driver.get("http://www.python.org")
    
    sleep(1) 
    
    driver.save_screenshot("web_screenshot.png") 
    
    driver.close()
    

    실행 결과 “http://www.python.org” 페이지의 스크린샷 “web_screenshot.png”이 생성되었다면 성공이다.

    참고로 폴더와 파일 구조는 다음과 같다.

    <working folder>
    └ selenium_test.py
    └ TOOL
        └ headless-chromium
        └ chromedriver
    

    REF

    browser 제어 개요

    무설치 chromium 사용

    Chromium 실행 위치 지정

    ... ... ... ...
    Back