Scrapy + SES로 웹 페이지의 변화를 감지 & 이메일로 알림

개요



웹페이지의 새로운 투고나 가격 변동...등의 갱신을 알려 주었으면 하는 것은 자주 있다. 본 논문에서는
웹 스크래핑 프레임워크 scrapy에서 얻은 웹 페이지의 변화를 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로 웹 페이지를 크롤링, 데이터 추출하고 pipeline.py에서 (scrapy에 의해 setting.py로 설정하면 자동으로 이루어진다.) DB에 저장.

scriptname.py에서 DB를 찾아 웹 페이지 업데이트와 같은 조건에서 다음과 같이 메일을 보냅니다.
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로 서버리스 스크래핑

좋은 웹페이지 즐겨찾기