본문 바로가기
[업무 지식]/Crawling

[변화 감지하기] 크롤링 대상의 변화에 대응하기

by 에디터 윤슬 2025. 1. 1.

정규 표현식으로 가격이 제대로 나오는지 확인하기

import re
value = '3,000'

# 숫자와 쉼표만을 포함한 정규 표현식에 매치하는지 확인합니다.
if not re.search(r'^[0-9,]+$', value):
    # 값이 제대로 돼 있지 않다면 예외를 발생시킵니다.
    raise ValueError('Invalid price')

Voluptuous로 유효성 검사하기

# pip install voluptuous
from voluptuous import Schema, Match  

# 다음 4개의 규칙을 가진 스키마를 정의합니다
schema = Schema({                  # 규칙1: 객체는 dict 자료형
    'name': str,                   # 규칙2:name은 str(문자열) 자료형
    'price': Match(r'^[0-9,]+$'),  # 규칙3:price가 정규 표현식에 맞는지 확인
}, required=True)                  # 규칙4:dict의 키는 필수

# Schema 객체는 함수처럼 호출해서 사용합니다.
# 매개변수에 대상을 넣으면 유효성 검사를 수행합니다.
schema({
    'name': '포도',
    'price': '3,000',
})  # 유효성 검사를 통과하므로 아무 문제 없음

schema({
    'name': None,
    'price': '3,000',
})  # 유효성 검사를 통과하지 못 하므로, MultipleInvalid 예외가 발생

 

변화 통지하기

  • .env 파일 생성 및 저장
EMAIL_ADDRESS=이메일 주소
EMAIL_PASSWORD=gmail 앱비밀번호(공백 없이)

 

  • 메일 발송
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import os
from dotenv import load_dotenv

# .env 파일 로드
load_dotenv()

# 환경 변수 가져오기
email_address = os.getenv('EMAIL_ADDRESS')
email_password = os.getenv('EMAIL_PASSWORD')

# MIMEText 객체로 메일을 생성합니다.
msg = MIMEText('메일 본문입니다.')  

# 제목에 한글이 포함될 경우 Header 객체를 사용합니다.
msg['Subject'] = Header('메일 제목입니다.', 'utf-8') 
msg['From'] = email_address
msg['To'] = '보낼 메일 주소'

with smtplib.SMTP_SSL('smtp.gmail.com') as smtp:
    # 구글 계정의 사용자 이름과 비밀번호를 지정해서 로그인합니다.
    # 2단계 인증을 설정한 경우 애플리케이션 비밀번호를 사용해 주세요.
    smtp.login(email_address, email_password)
    # send_message() 메서드로 메일을 전송합니다.
    smtp.send_message(msg)

 

  • 기존 비밀번호 변경시 초기화
from dotenv import load_dotenv
from dotenv import dotenv_values

# 기존 환경 변수 제거
os.environ.pop('EMAIL_ADDRESS', None)
os.environ.pop('EMAIL_PASSWORD', None)

# .env 파일 다시 로드
load_dotenv()