Python crawling made by AI

아래는 숙명여대 홈페이지에서 특정 단어를 검색하여 결과가 나오면 메일을 보내주는 소스이다. 이 프로그램을 CRON에 등록해서 매일 아침에 실행하게 했다. 만약에 모집요강이 뜨면 내게 메일을 보내준다.

클로드 AI의 지원을 받아 소스를 수정하고 메일을 보내는 기능을 추가했다. 코딩에 대한 기본 개념만 알고 있어도 AI의 지원을 받으면 얼마든지 개발이 가능하다.  최근에 만든 CCTV앱처럼 AI의 지원을 받으면 개발하기 쉽다.


이 프로그램을 개발하기 위해서는 기본적인 파이썬에 대한 기조지식이 있어야 한다. 또한 http통신에 대한 기초지식을 알고 있어야 한다. 메일을 보내는 것과 관련하여 smtp메일서버에 대한 기초지식을 알고 있어야 한다. 인터넷을 통해 검색하면 기초지식을 파악하는데는 하루도 안걸리는 일이다.

실제로 미국에서 조세프라는 청년은 AI로 앱을 만들어 15개월만에 2백만달러를 벌었다고 한다. (관련기사) 나중에 시간이 되면 주식분석 프로그램을 AI로 만들어 봐야겠다.

import requests
from bs4 import BeautifulSoup as bs
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os
import ssl
import re

def send_email(subject, body):
    sender_email = os.environ.get("SENDER_EMAIL")
    receiver_email = os.environ.get("RECEIVER_EMAIL")
    password = os.environ.get("EMAIL_PASSWORD")
    smtp_server = os.environ.get("SMTP_SERVER")
    smtp_port = int(os.environ.get("SMTP_PORT", 465))

    message = MIMEMultipart()
    message["From"] = sender_email
    message["To"] = receiver_email
    message["Subject"] = subject
    message.attach(MIMEText(body, "plain"))

    context = ssl.create_default_context()

    try:
        with smtplib.SMTP_SSL(smtp_server, smtp_port, context=context) as server:
            server.login(sender_email, password)
            server.send_message(message)
        print("이메일을 성공적으로 보냈습니다.")
    except Exception as e:
        print(f"이메일 전송 중 오류 발생: {e}")
        print(f"SMTP 서버: {smtp_server}")
        print(f"SMTP 포트: {smtp_port}")
        print(f"발신자 이메일: {sender_email}")

def search_sookmyung(query):
    url = "https://www.sookmyung.ac.kr/kr/etc/search.do"
    params = {"qt": query}
    headers = {
        "referer": "https://www.sookmyung.ac.kr/kr/etc/search.do",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
    }

    try:
        response = requests.get(url, params=params, headers=headers)
        response.raise_for_status()

        soup = bs(response.text, "lxml")
        result_span = soup.find('span', class_="result")
        
        if result_span:
            result_text = result_span.text.strip()
            print("검색 결과:", result_text)
            
            result_cnt = re.findall(r'\d+', result_text)
            if int(result_cnt[0]) > 0:
                email_subject = f"검색 결과 알림: {query}"
                email_body = f"'{query}'에 대한 검색 결과가 {result_text} 있습니다."
                send_email(email_subject, email_body) 
        else:
            print("검색 결과를 찾을 수 없습니다.")

    except requests.RequestException as e:
        print(f"요청 중 오류 발생: {e}")
    except Exception as e:
        print(f"예상치 못한 오류 발생: {e}")

def check_email_env_vars():
    required_vars = ["SENDER_EMAIL", "RECEIVER_EMAIL", "EMAIL_PASSWORD", "SMTP_SERVER", "SMTP_PORT"]
    for var in required_vars:
        if not os.environ.get(var):
            print(f"오류: 환경 변수 {var}가 설정되지 않았습니다.")
            return False
    return True


if __name__ == "__main__":
    if not check_email_env_vars():
        print("이메일 전송에 필요한 환경 변수를 설정해주세요.")
    else:
         search_sookmyung("2025 전과 모집 요강")

One Comment

  1. 드디어 내게 메일이 왔다. 9시 정각에 전날 올라온 공지를 보고 내게 메일을 보내왔다.
    메일

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.