본문 바로가기
데이터 엔지니어링

[Python] Selenium을 활용한 에브리타임 스크래핑(2) - GCP

by gibro 2022. 3. 8.

이전에 Colab에서 에브리타임 스크래핑을 진행하는 방법을 알아보았다. Selenium을 활용한 에브리타임 스크래핑(1)-Colab 편​

Colab에서는 컴퓨터를 켜서 Colab에서 코드를 실행해야지만 봇이 작동한다. 하지만 나는 컴퓨터를 켜지 않아도 백그라운드에서 봇이 작동하는 것을 원했다. 이를 위해서는 서버에 코드를 올릴 필요가 있었고 AWS, GCP 중 좀 더 친숙한 GCP에 코드를 올리기로 하였다.

Code Server

서버는 터미널에서 vim을 통해 코딩을 하는 방법과 code-server을 통해 VScode에서 코딩을 하는 방법이 있다.  아무래도 vim보다는 IDE에서 코딩을 하는 것이 편하므로 code-server를 통해 VSCode에서 프로젝트를 진행하였다. GCP에서 code server를 구축하는 방법은 아래의 블로그에서 자세히 설명하고 있다.

 

환경 세팅

필요한 라이브러리인 python, pip3, chromewebdriver, selenium, emoji, python-telegram-bot을 설치한다.

emoji 라이브러리는 이모티콘이 포함된 제목을 깨짐 없이 저장할 수 있게 해 준다.

sudo apt-get update
sudo apt-get install python3 python3-venv python3-pip
sudo apt install chromium-chromedriver

pip3 install emoji
pip3 install python-telegram-bot
pip3 install selenium

코드

웹 스크래핑 코드는 1편에서의 코드와 동일하다.

다만 1시간마다 웹 스크래핑을 진행하고 GCP 터미널을 종료해도 백그라운드에서 코드가 계속 실행되도록 하기 위해서는 쉘 스크립트를 작성할 필요가 있다. 쉘 스크립트는 반복되는 작업을 자동화하는데 유용한 스크립트로 리눅스 명령어, 변수, 반복문 등을 나열하여 실행시킬 수 있다. 내가 반복하고자 하는 작업은 1시간마다 웹 스크래핑 코드, 즉 everytime_scraper.py를 실행시키는 것이다. 이를 위해 쉘 스크립트 파일 execute.sh을 만들었고 코드는 다음과 같다. everytime_scraper.py를 실행하고 3600초(=1시간)를 쉬는 작업을 무한히 반복하는 코드이다. 

#!/bin/bash

while true :
do
    python3 everytime_scraper.py
    sleep 3600
done

더 자세한 쉘 스크립트 문법은 아래의 사이트에서 자세히 설명하고 있다.

쉘 스크립트 파일을 실행하기 위해서는 sh 명령어를 사용하면 된다. 또한 파일을 백그라운드에서 실행하게 되면 GCP 터미널을 종료해도 코드가 계속 실행되는데  명령어 뒤에 &를 붙이면 된다. 

sh execute.sh &

 

전체 코드는 여기서 확인할 수 있다.

 

후기

지금까지 개인 프로젝트를 진행할 때 내가 만들고 싶은 것, 다른 사람들이 많이 하는 것 등을 위주로 하였다. 하지만 이번 프로젝트처럼 누가 원하는 것을 만들어본 적은 처음이었다. 친구는 내가 개발한 서비스에 크게 만족하였고 고마움을 표시했는데 나는 누군가의 문제를 해결해주는 것을 좋아한다는 것을 알게 되었다. 또한 처음엔 이 프로젝트가 가능할까?는 생각을 하기도 하였다. 웹 스크래핑이 처음이었고 에브리타임 스크래핑을 진행했다는 사람은 많이 보지 못한 거 같았기 때문이다. 그런데 하나하나 차근차근 진행하다 보니까 되었다. 물론 셀레니엄, GCP를 이용하는데 많은 시행착오를 겪었지만 구글 신만 있으면 해결하지 못할 문제는 없고 만들지 못할 것은 없다는 것을 새삼 느꼈다.

댓글