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