본문 바로가기

[docker 예제] 도커를 활용한 우분투(ubuntu 20.04.1) 환경 구축부터 셀레니움(selenium)을 활용한 크롬드라이버 헤드리스(

ironwhale 2020. 12. 27.

docker를 사용한 우분투 환경 설정

1. docker pull ubuntu
우분투 이미지를 가져옵니다.

2. docker run -i -t <이미지명(예: ubuntu)> /bin/bash
우분투 컨테이너 설치 후 컨테이너 진입 합니다.

3. apt install -y software-properties-common
저도 리눅스를 이번에 처음 해보는것라 이거 먼지는 모르겠지만 대부분의 강의자료에서 설치를 하네요
이것을 설치하고 나면 python 3.8.5 버전이 설치 됩니다.

4. apt install python3-pip
pip를 설치 합니다. 이것을 실행하려면 pip3 install pandas 이런식으로 쓰시면 됩니다.

5. apt update
apt upgrade
이것도 왠만하면 다 하더군요

여기까지가 도커를 사용하여 기본적인 우분투 20.04.1 + python 3.8.5 환경을 구축하였습니다.
다음은 크롬드라이버와 셀레니움(selenium)을 사용하여 headless(헤드리스) 환경에서 크롤링 하는 법을 알아 보겠습니다.

1. docker run -i -t -v <로컬폴더 경로>:<리눅스폴더 경로 (예:/home/work/ )> <이미지:태그> /bin/bash
우분투 환경에서 로컬폴더를 바인드 마운트하는 과정 입니다.
이렇게 하면 도커 환경 내에서 로컬 폴더에 접근할 수 있습니다.

2. mkdir chrome
크롬이라는 폴더를 만들어서 이 폴더안에 크롬과 크롬 드라이버를 다운로드 할 것입니다.

3. apt install wget
apt install unzip
wget과 unzip을 설치합니다.
wget은 주소를 통해 다운로드하는 기능을 하는것 같고
unzip은 압축파일의 압축을 푸는 기능을 합니다.

4. 크롬폴더로 들어간 뒤 크롬을 다운로드 합니다.
설치방법은 아래 주소를 참고했습니다.

 

How to Install Google Chrome Web Browser on Ubuntu 20.04

Google Chrome is the most widely used web browser in the world. It is fast, easy to use and secure browser built for the modern web. This article explains how to install the Google Chrome web browser on Ubuntu 20.04.

linuxize.com

크롬설치파일을 다운로드: wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
크롬을 설치하는 명령어: apt install ./google-chrome-stable_current_amd64.deb

5. google-chrome --version으로 우분투 환경에 설치된 크롬의 버전을 확인합니다.

6. 설치된 크롬의 버전과 맞는 크롬 드라이버를 다운로드 합니다.
wget chromedriver.storage.googleapis.com/87.0.4280.88/chromedriver_linux64.zip

제가 설치한 크롬의 버전은 87.0.4280.88 입니다. 설치된 크롬의 버전과 동일한 버전으로 다운 받으시면 됩니다.
크롬드라이버는 아래 링크를 통해 확인합니다.

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

chromedriver.chromium.org

7. upzip chromedriver_linux64.zip 을 하여 다운받은 크롬드라이버 압축파일의 압축을 해제합니다.

8. cp chromedriver /usr/local/bin
크롬 드라이버를 /usr/local/bin 폴더로 복사하여 별도의 크롬드라이버 경로를 파이썬에서 지정하지 않아도 되게 합니다.

9. pip3 install selenium 셀레니움을 설치합니다.

여기까지 하면 셀레니움을 사용하여 크롤링할 준비가 되었습니다.

10. 지정된 로컬폴더에 다음과 같은 파이썬 코드를 작성합니다.
그리고 docker에서 파이썬 파일이 있는 곳으로 가서
python3 파일명(예:navernews.py)을 입력하면 정상적으로 실행되는것을 볼수 있습니다.

#파일명: navernews.py from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36") options.add_argument('--headless') # 추가 후 도커에서 정상 실행 됨 options.add_argument('--no-sandbox') # 추가 후 도커에서 정상 실행 됨 options.add_argument("window-size=1920x1080") driver = webdriver.Chrome(options=options) try: driver.get("https://news.naver.com/") # 주소로 이동하라는 것 get elem = driver.find_element_by_class_name("hdline_article_list") lis = elem.find_elements_by_class_name("hdline_article_tit") for li in lis: print(li.text) except Exception as e: print(e) finally: driver.quit()


마지막으로 이렇게 만든 도커를 이미지로 만드는 방법입니다.
1. exit로 컨테이너에서 나온 후 docker ps -a를 치면 생성된 컨테이너가 전부 보입니다.

2. docker commit <컨테이너 ID> 이미지이름:태그
이 명령어를 통해 앞서 설정해논 컨테이너를 이미지로 만듭니다.

3. 도커허브에 push하기 위해 docker login을 통해 도커에 로그인 합니다.

4. docker push 이미지이름:태그를 입력하여 도커허브에 업로드합니다.
도커 허브에 업로드한 이미지는 docker pull 이미지이름:태그을 통해 당겨올수 있습니다.
주의하실 점은 이경우 이미지 이름도커아이디/레파지토리이름 동일해야 푸쉬가 됩니다.

이렇게 도커 우분투 이미지를 이용하여 크롬드라이버와 셀레니움을 활용한 크롤링 방법을 알아보았습니다.
시간이 된다면 동영상으로 제작하여 업로드 해보도록 하겠습니다.

댓글