데이터 크롤링 후 이메일 보내기
대량의 정보를 찾고 정리하는 데 불필요한 시간을 낭비하고 있지 않으신가요?
인터넷에서 필요한 정보를 자동으로 수집하고 가공하여 알림 메일을 보내는 시스템을 구축하면 업무 생산성을 크게 높일 수 있습니다.
별도의 데이터 수집 시스템이나 알림 시스템을 구축할 필요가 없기 때문입니다.
이번 수업에서는 기상청에서 날씨 정보
를 가져온 후, 수집한 정보를 이메일
로 전송하는 방법을 알아보겠습니다.
크롤링한 날씨 정보를 주기적으로 이메일 전송
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 강의를 등록해 주세요!