가이드라인

데이터 크롤링 후 이메일 보내기

인터넷에서 필요한 정보를 자동으로 수집하고, 이를 기반으로 알림 메일을 보내는 시스템을 구축하면 업무 효율을 크게 높일 수 있습니다.

이메일을 보내기 위해서는 smtplib 라이브러리를 사용해 SMTP 서버에 연결하고, sendmail 메서드를 사용해 이메일을 전송해야 합니다.

이번 수업에서는 기상청에서 날씨 정보를 가져온 후, 수집한 정보를 이메일로 전송하는 방법을 알아보겠습니다.


크롤링한 날씨 정보를 주기적으로 이메일 전송
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from selenium import webdriver from selenium.webdriver.common.by import By # 코드프렌즈 가입 이메일만 수신 가능 receiver_email = "youremail@example.com" # 기상청에서 날씨 정보 가져오기 def get_weather(): # Chrome 드라이버 실행 driver = webdriver.Chrome() # 기상청 날씨 정보 페이지로 이동 url = "https://www.weather.go.kr/w/index.do" driver.get(url) # 기온과 체감온도 정보 가져오기 temperature_element = driver.find_element(By.CLASS_NAME, 'tmp') feels_like_element = driver.find_element(By.CLASS_NAME, 'chill') # 기온과 체감온도 정보 저장 temperature = temperature_element.text feels_like = feels_like_element.text driver.quit() # 튜플로 기온과 체감온도 정보 반환 weather_info = (temperature, feels_like) return weather_info # 이메일로 날씨 정보 전송 def send_email(weather_info): sender_email = "admin_email" sender_password = "admin_password" smtp_server = "smtp.gmail.com" port = 587 # 이메일 구성 msg = MIMEMultipart('alternative') msg['Subject'] = "오늘의 날씨 정보" msg['From'] = sender_email msg['To'] = receiver_email body = f""" <html> <body> <h1>오늘의 날씨 정보</h1> <p>기온: {weather_info[0]}</p> <p>체감온도: {weather_info[1]}</p> </body> </html> """ # MIME 파트 추가 html_email = MIMEText(body, 'html') msg.attach(html_email) # SMTP 서버 연결 server = smtplib.SMTP(smtp_server, port) # TLS(이메일 암호화) 연결 server.starttls() # 이메일 로그인 server.login(sender_email, sender_password) # 이메일 메시지를 문자열로 변환 text = msg.as_string() try: # 이메일 전송 server.sendmail(sender_email, receiver_email, text) print("이메일이 성공적으로 발송되었습니다!") except Exception as e: print(f"이메일 발송 중 에러 발생: {e}") finally: server.quit() # 날씨 정보 가져오기 weather_info = get_weather() # 이메일 전송 send_email(weather_info)

위 코드는 Selenium을 활용해 웹에서 데이터를 크롤링하고, 수집한 데이터를 이메일로 전송합니다.

이러한 과정을 schedule 라이브러리를 활용해 주기적으로 실행하면, 매일 특정 시간에 날씨 정보를 이메일로 받아볼 수 있습니다.

1시간마다 날씨 정보 이메일 전송하는 코드 예시
import schedule # schedule 라이브러리를 사용해 1시간마다 날씨 정보 이메일 전송 schedule.every().hour.do(send_email, get_weather()) # 보안상 이유로 실습 환경에서는 주기적 이메일 발송이 작동하지 않습니다 while True: schedule.run_pending()
Mission
0 / 1

기상청의 날씨 정보와 같이 동적인 데이터를 크롤링할 때 필요한 라이브러리는 무엇인가요?

requests
beautifulsoup4
selenium
smtplib

가이드라인

AI 튜터

배포

디자인

업로드

수업 노트

즐겨찾기

도움말

코드 에디터

코드 실행
코드 생성

실행 결과