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化・メール送信するまでの一連の作業を完全に自動化できます。スクレイピング結果の共有や、日次レポートの自動配信に役立つ仕組みとして、ぜひ取り入れてみてください。