【Python】スクレイピング結果を自動でCSV保存・メール送信する方法

【Python】スクレイピング結果を自動でCSV保存・メール送信する方法 Python

Webサイトから情報を自動で取得し、その結果をCSVに保存してメールで共有できれば、レポート作成やデータ収集の効率が格段に向上します。Pythonを使えば、これらの処理をまとめて自動化することが可能です。

この記事では、スクレイピング → CSV保存 → メール送信までを一連の流れとして構築する方法を紹介します。

使用するライブラリ

  • requests:Webページ取得
  • BeautifulSoup:HTMLパース
  • csv:CSV出力
  • smtplib, email:メール送信
pip install requests beautifulsoup4

ステップ1:スクレイピング処理

例として、架空のニュースサイトから記事タイトルとURLを取得する例です。

import requests
from bs4 import BeautifulSoup

url = "https://example.com/news"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

articles = []
for item in soup.select(".news-item"):
    title = item.select_one("h2").text.strip()
    link = item.select_one("a")["href"]
    articles.append([title, link])

ステップ2:CSVに保存

import csv

with open("scraped_news.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["タイトル", "URL"])
    writer.writerows(articles)

ステップ3:メールで送信(添付あり)

import smtplib
from email.message import EmailMessage

EMAIL = "youraddress@example.com"
PASSWORD = "yourpassword"
TO = "recipient@example.com"

msg = EmailMessage()
msg["Subject"] = "最新ニュースのスクレイピング結果"
msg["From"] = EMAIL
msg["To"] = TO
msg.set_content("CSVファイルを添付します。")

# CSVを添付
with open("scraped_news.csv", "rb") as f:
    msg.add_attachment(f.read(), maintype="application", subtype="octet-stream", filename="scraped_news.csv")

# メール送信
with smtplib.SMTP_SSL("smtp.example.com", 465) as smtp:
    smtp.login(EMAIL, PASSWORD)
    smtp.send_message(msg)

応用:定期実行やエラー通知の追加

  • cronやWindowsタスクスケジューラと組み合わせて定時実行
  • スクレイピング対象が0件だった場合にアラートを送る
  • SlackやLINE Notifyに通知を併用する

まとめ

Pythonを使えば、Webから情報を取得し、それをCSV化・メール送信するまでの一連の作業を完全に自動化できます。スクレイピング結果の共有や、日次レポートの自動配信に役立つ仕組みとして、ぜひ取り入れてみてください。