웹사이트 변경 감지 후 자동 알림 받는 법 (크롤링 자동화)

경쟁사 홈페이지의 가격이 언제 바뀌었는지, 관심 있는 상품이 언제 재입고됐는지 매번 직접 들어가서 확인하고 계신가요? 그러나 이런 확인 작업은 사람이 반복하기엔 비효율적이고, 무엇보다 타이밍을 놓치기 쉽습니다. 따라서 이런 상황에서는 웹사이트 모니터링 자동화를 구축해두는 것이 훨씬 효율적입니다. 오늘은 특정 페이지의 변경 사항을 자동으로 감지하고, 변화가 생겼을 때 즉시 알림까지 받는 방법을 소개하겠습니다.

기본 원리는 생각보다 단순하다

웹사이트 모니터링의 핵심은 “이전에 저장해둔 페이지 내용”과 “지금 새로 가져온 페이지 내용”을 비교하는 것입니다. 즉, 정해진 주기로 페이지를 크롤링한 뒤, 이전 실행 결과와 다르면 변경으로 판단하고 알림을 보내는 구조입니다. 물론 페이지 전체를 비교할 수도 있지만, 원하는 특정 영역(가격, 재고 상태 등)만 뽑아서 비교하면 훨씬 정확하고 노이즈도 줄어듭니다.

필요한 라이브러리

크롤링에는 requestsBeautifulSoup을, 이전 상태 저장에는 간단한 텍스트 파일이나 파일 해시를 사용합니다.

bash

pip install requests beautifulsoup4

실전 예제: 특정 영역 변경 감지하기

아래는 특정 상품 페이지의 가격 정보를 감지해, 이전과 다르면 알림을 보내는 스크립트입니다.

python

import requests
from bs4 import BeautifulSoup
import hashlib
from pathlib import Path

URL = "https://example.com/product/123"
HASH_FILE = Path("last_hash.txt")

def get_target_content() -> str:
    response = requests.get(URL, timeout=10)
    soup = BeautifulSoup(response.text, "html.parser")
    price_tag = soup.select_one(".price")
    return price_tag.text.strip() if price_tag else ""

def has_changed(content: str) -> bool:
    current_hash = hashlib.sha256(content.encode()).hexdigest()
    if not HASH_FILE.exists():
        HASH_FILE.write_text(current_hash)
        return False
    previous_hash = HASH_FILE.read_text()
    if current_hash != previous_hash:
        HASH_FILE.write_text(current_hash)
        return True
    return False

if __name__ == "__main__":
    content = get_target_content()
    if has_changed(content):
        print("변경 감지됨:", content)
    else:
        print("변경 없음")

이 스크립트는 매번 실행될 때마다 해당 영역의 텍스트를 해시로 변환해 저장해두고, 다음 실행 시 새로 가져온 값과 비교합니다. 그래서 페이지 전체가 아니라 원하는 부분만 정확하게 추적할 수 있습니다.

변경 감지되면 바로 알림 보내기

변경이 감지된 순간, 이전에 만들어둔 텔레그램 봇 알림 함수를 그대로 연결하면 됩니다.

python

import requests

TOKEN = "발급받은_봇_토큰"
CHAT_ID = "내_채팅_ID"

def send_telegram_message(text: str):
    url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
    requests.post(url, data={"chat_id": CHAT_ID, "text": text})

if has_changed(content):
    send_telegram_message(f"페이지 변경 감지: {content}")

이렇게 하면 변경 감지와 알림 발송이 하나의 파이프라인으로 자연스럽게 연결됩니다.

자동 반복 실행으로 완성하기

물론 이 스크립트도 한 번만 실행해서는 의미가 없습니다. 따라서 앞서 다룬 윈도우 작업 스케줄러나 크론잡에 등록해 10분, 30분, 혹은 1시간 간격으로 자동 실행되도록 설정해야 진짜 모니터링 시스템이 완성됩니다.

주의할 점

다만 크롤링 대상 사이트의 이용약관이나 robots.txt를 반드시 확인해야 합니다. 그리고 너무 짧은 주기로 반복 요청을 보내면 서버에 부담을 주거나 IP가 차단될 수 있으므로, 적절한 요청 간격을 두는 것이 중요합니다.

마무리

웹사이트 모니터링 자동화는 한 번 구축해두면 이후로는 정말 손댈 일이 거의 없는 자동화입니다. 가격 추적, 재입고 확인, 공지사항 변경 감지 등 다양한 상황에 응용할 수 있으니, 오늘 소개한 기본 구조를 자신의 필요에 맞게 확장해보시기 바랍니다.