제가 직접 경험해본 결과로는, Docker를 활용한 웹 크롤링은 정말 흥미롭고 유용한 방식이에요. 특히 Python과 Selenium을 이용해 쉽게 구현할 수 있답니다. 이 글에서는 Docker를 활용한 웹 크롤러 구축 과정을 자세히 설명해드릴게요. 아래를 읽어보시면 Docker 환경에서 웹 크롤러를 만드는 데 필요한 모든 정보를 얻을 수 있을 거예요.
1. Docker 환경 설정하기
먼저, Docker 파일을 세팅해주는 것이 필요해요. 아래는 제가 실제로 사용한 Dockerfile 예제입니다:
FROM python:3.9
WORKDIR /usr/src
RUN apt-get -y update
RUN apt install -y wget unzip
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt -y install ./google-chrome-stable_current_amd64.deb
RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip
RUN mkdir chrome
RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/src/chrome
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY app ./app
CMD [ "/bin/bash", "app/loop.sh" ]
이렇게 Dockerfile을 작성하면, Python 환경이 포함된 Docker 이미지를 만들 수 있어요. 이 이미지에는 Google Chrome과 ChromeDriver가 설치되며, 웹 크롤링을 위한 여러 패키지가 포함된 requirements.txt도 활용할 수 있습니다.
1.1. 도커 이미지 빌드하기
이제 도커 이미지를 빌드해 볼게요. 아래의 명령어로 이미지를 생성해보세요.
docker build --tag yoskr/chrome:0.2 ./
1.2. 도커 컨테이너 실행하기
이미지가 성공적으로 생성되면, 다음으로 컨테이너를 실행해볼게요:
docker run -d --name hyundy --volume /volume1/SSD_DATA/chrome/app/:/usr/src/app/ yoskr/chrome:0.2
이 명령어를 통해 도커 컨테이너를 백그라운드에서 실행하고, 소스 폴더를 마운트해서 수정할 수 있도록 설정해 줍니다.
2. 크롤러 코드 작성하기
이제 본격적으로 크롤링을 위한 코드를 작성해야 해요. 제가 작성한 main.py 코드를 예시로 소개할게요.
“`python
import warnings
warnings.filterwarnings(“ignore”, category=DeprecationWarning)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import datetime, os, telegram, asyncio
def tele_sand_msg(msg):
if os.path.isfile(‘/usr/src/app/telegram.txt’):
with open(‘/usr/src/app/telegram.txt’, mode=’r’, encoding=’UTF8′) as file:
t = file.read()
token, chat_id = t.split(‘,’)
bot = telegram.Bot(token=token)
asyncio.run(bot.send_message(chat_id=chat_id, text=msg))
def Hy_mall():
option = Options()
option.add_argument(‘–headless’)
driver = webdriver.Chrome(f”/usr/src/chrome/chromedriver”, options=option)
url = “https://mpointmall.hyundaicard.com/goods/goodsList.do?bizGbn=3&mpmlBrndId=B07000000&leadIn=nav”
driver.get(url)
goodsListArea = driver.find_elements("xpath", '//*[@id="goodsListArea"]/li/div/p')
for item_s in goodsListArea:
if "m2" in item_s.text.lower():
tele_sand_msg(item_s.text + " 상품이 존재합니다.")
driver.quit()
Hy_mall()
“`
2.1. 크롤링 과정 설명하기
위 코드에서 Selenium을 사용해 특정 웹사이트에 접속하고, 원하는 상품이 있는지를 확인해요. 만약 특정 조건에 맞는 상품이 있으면, 텔레그램으로 메시지를 전송하도록 했어요. 제 경험상, 이 방법이 상당히 유용하더라고요.
2.2. 텔레그램 설정하기
텔레그램 메시지를 보내기 위해서는, 텔레그램 봇을 생성하고 API 키를 확보해야 해요. 이를 위해서는 텔레그램에서 @BotFather를 찾아봄으로써 쉽게 만들 수 있답니다. 봇이 메시지를 보내기 위해서는 필요한 사항을 잘 확인해야 해요.
3. 루프 설정하기
크롤러가 1시간마다 자동으로 실행될 수 있도록 loop.sh 파일을 만들어볼게요.
“`bash
!/bin/bash
while :
do
python ./app/main.py
sleep 3600
done
“`
이 스크립트를 통해, 크롤러가 지속적으로 실행될 수 있도록 설정할 수 있어요. 여기서 sleep 3600은 1시간 대기 후 다시 실행하겠다는 의미에요.
3.1. 배포 준비하기
이제 모든 것이 설정되었으니, 도커 컨테이너가 자동으로 위의 루프로 실행되도록 하면 됩니다. 이를 통해 매시간마다 크롤링을 실행할 수 있게 되는 것이죠.
4. 필요 패키지와 설정
아래는 제가 사용했던 requirements.txt 파일의 내용입니다.
anyio==3.6.2
async-generator==1.10
attrs==22.2.0
certifi==2022.12.7
chromedriver-autoinstaller==0.4.0
exceptiongroup==1.1.0
h11==0.14.0
httpcore==0.16.3
httpx==0.23.3
idna==3.4
outcome==1.2.0
pyperclip==1.8.2
PySocks==1.7.1
python-telegram-bot==20.0
rfc3986==1.5.0
selenium==4.7.2
sniffio==1.3.0
sortedcontainers==2.4.0
telegram==0.0.1
trio==0.22.0
trio-websocket==0.9.2
urllib3==1.26.14
wsproto==1.2.0
4.1. 의존성 관리하기
이 파일은 현재 크롤러 운영에 필요한 모든 패키지를 포함하고 있습니다. 필요에 따라 패키지를 추가하거나 삭제해도 괜찮아요.
5. 최종 점검 및 테스트
마지막으로, 모든 설정이 완료되었다면, 도커 컨테이너를 실행하고 크롤링이 제대로 작동하는지를 확인해보세요. 작동 중에 문제가 발생한다면, 로그를 확인하여 문제를 해결해야 합니다.
사실 처음에는 설정하는 데 어려움이 있었어요. 각 단계가 맞지 않으면 실행되지 않기 때문에, 꼼꼼하게 확인하는 것이 중요하더라고요.
자주 묻는 질문 (FAQ)
Docker와 Selenium을 함께 사용할 수 있나요?
네, Docker와 Selenium을 함께 사용하면 웹 크롤링을 효율적으로 관리할 수 있어요.
크롤러가 특정 페이지에서 막히면 어떻게 해야 하나요?
셀레니움의 wait 기법을 활용하여 특정 요소가 로드될 때까지 기다리는 코드를 추가해야 해요.
텔레그램 봇을 설정하는 방법은 무엇인가요?
텔레그램에서 BotFather를 이용해 새로운 봇을 만들고 API 키를 받아야 해요.
웹 크롤링 시 주의할 점은 무엇인가요?
웹사이트의 이용 약관을 항상 확인해야 하며, robots.txt 파일을 준수해야 해요.
이렇게 여러 방면으로 설정하고 테스트해보면서 재미를 느꼈답니다. 웹 크롤링을 설정하면서, 여러 기술을 한꺼번에 배울 수 있었어요. 앞으로도 Docker와 Python을 활용한 다양한 프로젝트를 시도해볼 예정이에요.
키워드: docker, 웹 크롤링, python, selenium, 크롤러, telegram, 도커, 크롬드라이버, 자동화, 클라우드, 프로그램
⭐⭐⭐⭐⭐ (5 / 5.0)
