안녕하세요, 개발자 여러분! 오늘은 파이썬을 활용해 웹사이트에서 콘텐츠를 자동으로 스크래핑하고, 이를 이메일로 공유하는 간단한 스크립트를 소개하려 해요. 이 스크립트는 웹 개발자나 콘텐츠 큐레이터에게 유용할 거예요. 예를 들어, 특정 사이트의 최신 뉴스나 블로그 포스트를 매일 추출해 팀원에게 메일로 보내는 자동화 도구로 활용할 수 있죠. 코드가 간결해서 초보자도 쉽게 따라할 수 있어요. 그럼 단계별로 살펴볼까요?
Python으로 Gmail에 메일을 보내는 방법을 알려드리겠습니다. 웹사이트 내용을 포함하는 예제도 함께 제공하겠습니다.## 사용 방법
필요한 라이브러리 설치:
pip install requests beautifulsoup4
Gmail 앱 비밀번호 생성:
Gmail에서는 보안상 일반 비밀번호로 SMTP를 사용할 수 없습니다. 앱 비밀번호를 생성해야 합니다:
- Google 계정 → 보안 → 2단계 인증 활성화
- 보안 → 앱 비밀번호 → 앱 선택(메일) → 기기 선택
- 생성된 16자리 비밀번호를 sender_password에 입력
코드 수정 사항:
- sender_email: 발신자 Gmail 주소
- sender_password: 생성한 앱 비밀번호
- receiver_email: 수신자 이메일 주소
- url: 원하는 웹사이트 URL
이 코드는 웹사이트에서 제목과 단락을 추출하여 이메일로 발송합니다. 필요에 따라 BeautifulSoup의 선택자를 수정하여 원하는 콘텐츠를 추출할 수 있습니다!
필요한 준비물
이 스크립트를 실행하려면 다음 라이브러리가 필요해요:
- requests: 웹페이지 내용을 가져오기 위한 HTTP 요청 라이브러리.
- BeautifulSoup (bs4): HTML 파싱을 위한 라이브러리. 웹페이지에서 제목이나 단락 같은 요소를 쉽게 추출할 수 있어요.
- smtplib과 email.mime: 파이썬 표준 라이브러리로, 이메일을 작성하고 보내는 데 사용됩니다.
이 라이브러리들은 대부분 pip로 설치할 수 있어요: pip install requests beautifulsoup4
.
또한, Gmail을 사용하려면 Google 계정에서 '앱 비밀번호'를 생성해야 해요. 이는 2단계 인증을 활성화한 후, Google 계정 설정 > 보안 > 앱 비밀번호에서 만들 수 있습니다. 보안을 위해 실제 비밀번호 대신 앱 비밀번호를 사용하세요!
스크립트의 동작 원리
이 코드는 크게 두 부분으로 나뉩니다: 1) 웹 콘텐츠 추출, 2) 이메일 작성 및 발송.
- 웹 콘텐츠 가져오기:
requests.get()
으로 지정된 URL(예: https://www.example.com)을 불러옵니다. 타임아웃을 10초로 설정해 안정성을 높였어요.- BeautifulSoup으로 HTML을 파싱한 후,
<h1>
태그의 제목과 처음 3개의<p>
태그(단락)를 추출합니다. - 오류가 발생하면 예외 처리를 통해 에러 메시지를 저장해요. 이는 실전에서 중요한 부분이죠!
- 이메일 작성 및 발송:
MIMEMultipart
로 멀티파트 메시지를 만들고, 제목, 발신자, 수신자를 설정합니다.- 본문에 추출된 웹 콘텐츠를 포함해 텍스트 형식으로 붙입니다.
smtplib.SMTP_SSL
로 Gmail SMTP 서버에 연결해 로그인하고 메일을 보냅니다. 성공 시 콘솔에 메시지가 출력되죠.
전체 코드는 다음과 같아요 (주석 포함):
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import requests
from bs4 import BeautifulSoup
# Gmail 계정 정보
sender_email = "your_email@gmail.com"
sender_password = "mmrztpdydcwmpyct" # 앱 비밀번호 사용 필요
receiver_email = "recipient@example.com"
# 웹사이트에서 콘텐츠 가져오기
url = "https://www.example.com"
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.content, 'html.parser')
# 예: 제목과 본문 추출
title = soup.find('h1')
paragraphs = soup.find_all('p')
web_content = f"웹사이트 제목: {title.get_text() if title else 'N/A'}\n\n"
web_content += "본문 내용:\n"
for p in paragraphs[:3]: # 처음 3개 단락만
web_content += p.get_text() + "\n"
except Exception as e:
web_content = f"웹 콘텐츠를 가져오는데 실패했습니다: {str(e)}"
# 이메일 메시지 작성
message = MIMEMultipart("alternative")
message["Subject"] = "Example.com 콘텐츠 공유"
message["From"] = sender_email
message["To"] = receiver_email
# 이메일 본문
body = f"""
안녕하세요,
{url}에서 가져온 콘텐츠를 공유합니다:
{web_content}
감사합니다.
"""
# 텍스트 형식으로 이메일 본문 추가
text_part = MIMEText(body, "plain", "utf-8")
message.attach(text_part)
# Gmail SMTP 서버를 통해 이메일 발송
try:
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
server.login(sender_email, sender_password)
server.send_message(message)
print("이메일이 성공적으로 발송되었습니다!")
except Exception as e:
print(f"이메일 발송 실패: {str(e)}")
사용 팁과 확장 아이디어
- 커스터마이징: URL이나 추출 태그를 변경해 원하는 사이트에 맞춰보세요. 예를 들어, 뉴스 사이트의 기사 제목과 요약을 가져올 수 있어요.
- 자동화: cron이나 scheduler 라이브러리(예: schedule)를 추가하면 매일 자동으로 실행할 수 있습니다.
- 주의사항: 웹 스크래핑은 사이트의 robots.txt를 확인하고, 법적 문제를 피하세요. 과도한 요청은 IP 차단을 유발할 수 있어요. 또한, 이메일 발송 시 스팸 필터를 피하기 위해 본문을 자연스럽게 작성하세요.
- 확장: HTML 형식 이메일을 추가하거나, 여러 URL을 순회하도록 수정하면 더 강력해질 거예요.
이 스크립트를 통해 파이썬의 실용성을 느껴보세요! 질문이 있으시면 댓글로 남겨주세요. 다음 포스트에서 더 고급 자동화 팁을 공유할게요. 😊
'Python을 배워보자' 카테고리의 다른 글
박스오피스예매율실시간 크롤링 (0) | 2025.09.23 |
---|---|
Playwright를 활용한 네이버 증권 크롤링 예제 (3) | 2025.07.26 |
Playwright: 현대적인 웹 테스트 자동화의 강자 (3) | 2025.07.26 |
국가별 월별 기온 데이터를 FastAPI로 백엔드 구축 및 Dash로 테이블 출력하기 (3) | 2025.07.24 |
영화진흥위원회(KOBIS) 오픈 API를 사용해 일별 박스오피스 데이터를 가져오는 Python 샘플 코드 (4) | 2025.07.22 |