Guidelines

데이터 크둀링 ν›„ 이메일 보내기

λŒ€λŸ‰μ˜ 정보λ₯Ό μ°Ύκ³  μ •λ¦¬ν•˜λŠ” 데 λΆˆν•„μš”ν•œ μ‹œκ°„μ„ λ‚­λΉ„ν•˜κ³  μžˆμ§€ μ•ŠμœΌμ‹ κ°€μš”?

μΈν„°λ„·μ—μ„œ ν•„μš”ν•œ 정보λ₯Ό μžλ™μœΌλ‘œ μˆ˜μ§‘ν•˜κ³  κ°€κ³΅ν•˜μ—¬ μ•Œλ¦Ό 메일을 λ³΄λ‚΄λŠ” μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜λ©΄ 업무 생산성을 크게 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

λ³„λ„μ˜ 데이터 μˆ˜μ§‘ μ‹œμŠ€ν…œμ΄λ‚˜ μ•Œλ¦Ό μ‹œμŠ€ν…œμ„ ꡬ좕할 ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

이번 μˆ˜μ—…μ—μ„œλŠ” κΈ°μƒμ²­μ—μ„œ 날씨 정보λ₯Ό κ°€μ Έμ˜¨ ν›„, μˆ˜μ§‘ν•œ 정보λ₯Ό μ΄λ©”μΌλ‘œ μ „μ†‘ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


ν¬λ‘€λ§ν•œ 날씨 정보λ₯Ό 주기적으둜 이메일 전솑
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

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result