Scrapy+SES でWebページの変化を感知&メールでお知らせ
概要
webページの新しい投稿や価格変動...などの更新を知らせて欲しいってことはよくある。本稿では
webスクレイピングフレームワークscrapyで得たwebページの変化を、AWSのSES(Simple Email Service)によりメールでお知らせする方法の片鱗を紹介する。もちろん複数ページ可能。
詳細
PasSとしてScrapinghubを使う。クラウドサーバーによる定期実行、データベースとして使える。
spidername.pyとscriptname.pyを時間差で定期実行する。
(scrapinghub上ではscrapyで制御されたspiderの他、普通のpython scriptも実行できる。デプロイのためにsetup.pyに記載必要。)
# 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でサーバーレス・スクレイピング
Author And Source
この問題について(Scrapy+SES でWebページの変化を感知&メールでお知らせ), 我々は、より多くの情報をここで見つけました https://qiita.com/yama_ringo/items/e8ee6b00f55b352f7a16著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .