본문으로 건너뛰기
실습하기

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

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

이메일을 보내기 위해서는 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()

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!