Супер простой и понятный способ непрерывно отслеживать изменения на веб-сайтах.
В поисках интересных мероприятий для детей во время COVID я заметил, что все билеты были распроданы быстрее, чем я мог их проверить! Если бы только был способ предупредить меня по электронной почте, когда веб-сайт изменился с «Продано» на «Доступно»… Ой, подождите… Я знаю, как это сделать.
План
Все, что я собираюсь сделать здесь, это настроить скрипт Python, который будет подключаться к моей учетной записи Gmail через пароль приложения (о котором я расскажу позже), а затем проанализирую веб-сайт на наличие изменений. Когда на сайте появятся изменения, которые я хочу, все, что я сделаю, это вызову электронное письмо! БУМ!
Пароль приложения Gmail
Первое, что нужно сделать, это убедиться, что вашей учетной записи Gmail разрешено отправлять электронные письма через программу. Лучший способ сделать это — сгенерировать пароль приложения. В основном это действует как ключ API для вашей собственной учетной записи. Чтобы настроить это, я перечислю точные шаги в разделе справки Gmail:
- Зайдите в свой Аккаунт Google.
- Выберите Безопасность.
- В разделе «Вход в Google» выберите «Пароли приложений». Возможно, вам потребуется войти в систему. Если у вас нет этой опции, это может быть связано с тем, что:
А) Двухэтапная аутентификация не настроена для вашего аккаунта.
Б) Двухэтапная аутентификация настроена только для электронных ключей.
C) Ваш аккаунт связан с работой, учебным заведением или другой организацией.
Г) Вы включили Дополнительную защиту.
4. Внизу выберите Выбрать приложение и выберите приложение, которое вы используете › Выберите устройство и выберите устройство, которое вы используете › Создать.
5. Следуйте инструкциям, чтобы ввести пароль приложения. Пароль приложения — это 16-значный код на желтой полосе на вашем устройстве.
6. Нажмите Готово
Вот как это выглядит:
Установить пакеты пипсов
Если они у вас еще не установлены, вам понадобится BeautifulSoup4 и запросы:
pip install BeautifulSoup4 pip install requests
Далее нам нужно указать, какие изменения мы хотим обнаружить. Для этого перейдите на целевой URL. В данном случае я использую: https://rockevents.ca/event/outdoor-classroom/
Я хочу продолжать проверять элемент формы внизу. Я открываю инспектор и нахожу идентификатор формы «tribe-tickets».
Все, что осталось, — это закодировать цикл, чтобы отслеживать изменения и отправлять электронное письмо!
import smtplib import bs4 import requests import time # Set up the send account and general email details gmail_user = '[email protected]' gmail_password = 'YOUR APP PASSWORD' sent_from = gmail_user to = ['[email protected]', '[email protected]'] subject = 'outdoor-classroom Change Detected' # Set the target URL and request the site and look for the ID tag url = 'https://rockevents.ca/event/outdoor-classroom/' source = requests.get(url).text soup = bs4.BeautifulSoup(source,'html.parser') event_string = str(soup.find('form', id='tribe-tickets')) # Start a loop where every min we check the site again while True: time.sleep(60) print('Checking site') source = requests.get(url).text soup = bs4.BeautifulSoup(source,'html.parser') event_string_new = str(soup.find('form', id='tribe-tickets')) # If the html of the form has changed trigger the email! if event_string!=event_string_new: body = 'Change on the site:' + url email_text = """\ From: %s To: %s Subject: %s %s """ % (sent_from, ", ".join(to), subject, body) try: # SEND THE EMAIL!!!! server = smtplib.SMTP_SSL('smtp.gmail.com', 465) server.ehlo() server.login(gmail_user, gmail_password) server.sendmail(sent_from, to, email_text) server.close() event_string = event_string_new except: print ('Something went wrong...')
Вау, это довольно легко!
Запуск навсегда
Так что вопрос в том, как долго это будет работать. Если вы работаете локально, вы можете просто оставить свой компьютер включенным и запустить это в фоновом режиме:
nohup python script.py
Лично мне нравится использовать Cloud9 от AWS, который представляет собой интегрированную среду разработки. Дайте ему посмотреть. Чтобы запустить мой скрипт Python в фоновом режиме, все, что я делаю, это запускаю дополнительный терминал:
Cloud9 IDE:> screen -S MyJob Cloud9 IDE:> python script.py CTRL+a+d to exit
Вы также можете настроить время ожидания сеанса инстанса EC, зайдя в настройки и выбрав, чтобы он никогда не спал (имейте в виду, что вы понесете расходы).
Дайте знать, если у вас появятся вопросы!!!