LoginSignup
3
12

More than 5 years have passed since last update.

Scrapy+SES でWebページの変化を感知&メールでお知らせ

Last updated at Posted at 2017-08-27

概要

webページの新しい投稿や価格変動...などの更新を知らせて欲しいってことはよくある。本稿では
webスクレイピングフレームワークscrapyで得たwebページの変化を、AWSのSES(Simple Email Service)によりメールでお知らせする方法の片鱗を紹介する。もちろん複数ページ可能。

詳細

PasSとしてScrapinghubを使う。クラウドサーバーによる定期実行、データベースとして使える。
spidername.pyscriptname.pyを時間差で定期実行する。
(scrapinghub上ではscrapyで制御されたspiderの他、普通のpython scriptも実行できる。デプロイのためにsetup.pyに記載必要。)
scrapinghub0.png

# Automatically created by: shub deploy

from setuptools import setup, find_packages

setup(
    name         = 'project',
    version      = '2.x',
    packages     = find_packages(),
    package_data={'directoryname0': ['directoryname1/*.html']},
    scripts=['script_directoryname/scriptname.py'],
    entry_points = {'scrapy': ['settings = directoryname0.settings']},
      )

spidername.pyでwebページをクローリング、データ抽出し、pipeline.pyで(scrapyによりsetting.pyで設定してれば自動で行われる。)DBに保存。

scriptname.pyでDBを参照し、webページの更新などの条件で以下のようにメール送信。

import boto3
from jinja2 import Environment, PackageLoader
from directoryname0 import settings

jinja_env = Environment(loader=PackageLoader('directoryname0', 'directoryname1'))

def send_email_alert(items):
    html_body = jinja_env.get_template('email.html').render(items=items)

    client = boto3.client("ses",
                        aws_access_key_id = settings.AWS_ACCESS_KEY,
                        aws_secret_access_key = settings.AWS_SECRET_KEY,
                        region_name = settings.SES_REGION)
    client.send_email(
            Destination={'ToAddresses': [settings.EMAIL_ALERT_TO],},
            Message={
                'Body': {'Html': {'Charset': 'UTF-8',
                        'Data':html_body},},
                'Subject': {'Charset': 'UTF-8',
                    'Data': 'Email title',},
                    },
            Source= settings.EMAIL_ALERT_FROM,
                     )

Reference

HOW TO BUILD YOUR OWN PRICE MONITORING TOOL
ScrapyCloud + DynamoDBでサーバーレス・スクレイピング

3
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
12