Python을 배워보자

파이썬으로 웹 콘텐츠 자동 추출하고 이메일 보내기: 간단한 스크립트 튜토리얼

_Blue_Sky_ 2025. 10. 11. 09:09
728x90

안녕하세요, 개발자 여러분! 오늘은 파이썬을 활용해 웹사이트에서 콘텐츠를 자동으로 스크래핑하고, 이를 이메일로 공유하는 간단한 스크립트를 소개하려 해요. 이 스크립트는 웹 개발자나 콘텐츠 큐레이터에게 유용할 거예요. 예를 들어, 특정 사이트의 최신 뉴스나 블로그 포스트를 매일 추출해 팀원에게 메일로 보내는 자동화 도구로 활용할 수 있죠. 코드가 간결해서 초보자도 쉽게 따라할 수 있어요. 그럼 단계별로 살펴볼까요?

728x90

Python으로 Gmail에 메일을 보내는 방법을 알려드리겠습니다. 웹사이트 내용을 포함하는 예제도 함께 제공하겠습니다.## 사용 방법

필요한 라이브러리 설치:

pip install requests beautifulsoup4

Gmail 앱 비밀번호 생성:

Gmail에서는 보안상 일반 비밀번호로 SMTP를 사용할 수 없습니다. 앱 비밀번호를 생성해야 합니다:

  1. Google 계정 → 보안 → 2단계 인증 활성화
  2. 보안 → 앱 비밀번호 → 앱 선택(메일) → 기기 선택
  3. 생성된 16자리 비밀번호를 sender_password에 입력

코드 수정 사항:

  • sender_email: 발신자 Gmail 주소
  • sender_password: 생성한 앱 비밀번호
  • receiver_email: 수신자 이메일 주소
  • url: 원하는 웹사이트 URL

이 코드는 웹사이트에서 제목과 단락을 추출하여 이메일로 발송합니다. 필요에 따라 BeautifulSoup의 선택자를 수정하여 원하는 콘텐츠를 추출할 수 있습니다!

 

 

728x90

필요한 준비물

이 스크립트를 실행하려면 다음 라이브러리가 필요해요:

  • requests: 웹페이지 내용을 가져오기 위한 HTTP 요청 라이브러리.
  • BeautifulSoup (bs4): HTML 파싱을 위한 라이브러리. 웹페이지에서 제목이나 단락 같은 요소를 쉽게 추출할 수 있어요.
  • smtplib과 email.mime: 파이썬 표준 라이브러리로, 이메일을 작성하고 보내는 데 사용됩니다.

이 라이브러리들은 대부분 pip로 설치할 수 있어요: pip install requests beautifulsoup4.

또한, Gmail을 사용하려면 Google 계정에서 '앱 비밀번호'를 생성해야 해요. 이는 2단계 인증을 활성화한 후, Google 계정 설정 > 보안 > 앱 비밀번호에서 만들 수 있습니다. 보안을 위해 실제 비밀번호 대신 앱 비밀번호를 사용하세요!

스크립트의 동작 원리

이 코드는 크게 두 부분으로 나뉩니다: 1) 웹 콘텐츠 추출, 2) 이메일 작성 및 발송.

  1. 웹 콘텐츠 가져오기:
    • requests.get()으로 지정된 URL(예: https://www.example.com)을 불러옵니다. 타임아웃을 10초로 설정해 안정성을 높였어요.
    • BeautifulSoup으로 HTML을 파싱한 후, <h1> 태그의 제목과 처음 3개의 <p> 태그(단락)를 추출합니다.
    • 오류가 발생하면 예외 처리를 통해 에러 메시지를 저장해요. 이는 실전에서 중요한 부분이죠!
  2. 이메일 작성 및 발송:
    • 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을 순회하도록 수정하면 더 강력해질 거예요.

이 스크립트를 통해 파이썬의 실용성을 느껴보세요! 질문이 있으시면 댓글로 남겨주세요. 다음 포스트에서 더 고급 자동화 팁을 공유할게요. 😊

 

728x90