Примечание редакторам Data Science. Хотя мы разрешаем независимым авторам публиковать статьи в соответствии с нашими правилами и рекомендациями, мы не поддерживаем вклад каждого автора. Не следует полагаться на работы автора без консультации с профессионалами. См. Подробности в наших Условиях для читателей.
Как сэкономить деньги с Python
В настоящее время есть много способов сэкономить деньги, но разве не было бы весело написать что-то и знать, что вы экономите деньги по-настоящему?
Вот почему я придумал этот инструмент, который отслеживает интересующие вас товары на любом веб-сайте, и, как только цена станет для вас достаточно подходящей, он отправит вам электронное письмо, и, наконец, вы сможете совершить покупку. это по гораздо лучшей цене.
В качестве примера я собираюсь использовать Amazon для отслеживания пары товаров. Как только мы закончим, вы можете заменить ссылки интересующими вас элементами.
Это очень простое использование Python, и вам не нужны какие-либо особые или весьма впечатляющие навыки, чтобы делать это со мной. Мы пойдем шаг за шагом и построим все с нуля.
Давайте сразу же приступим к делу!
Кодирование
Планируйте процесс
Во-первых, нам нужно найти элементы, которые мы хотим отслеживать. Я нашел эти наушники довольно дорогими.
Чтобы это работало, нам понадобится пара библиотек, поэтому давайте настроим среду.
Настройка среды
Как только мы закончим поиск предметов, мы открываем редактор. Мой личный выбор - Visual Studio Code. Он прост в использовании, настраивается и легок для вашего компьютера.
Откройте новый проект в любом месте и создайте один новый файл. Вот пример того, как мой выглядит, чтобы помочь вам:
В VS Code есть вкладка «Терминал», с помощью которой вы можете открыть внутренний терминал внутри VS Code, что очень полезно для того, чтобы все было в одном месте.
В этом терминале вы должны установить библиотеки:
pip3 install requests
Запросы можно использовать для добавления содержимого, такого как заголовки, данные форм, составные файлы и параметры, с помощью простых библиотек Python. Он также позволяет вам получить доступ к данным ответа Python таким же образом.
sudo pip3 install beautifulsoup4
Beautiful Soup - это библиотека Python для извлечения данных из HTML, XML и других языков разметки.
pip3 install smtplib
Модуль smtplib определяет объект сеанса клиента SMTP, который можно использовать для отправки почты на любой компьютер в Интернете с помощью демона прослушивателя SMTP или ESMTP.
Создание инструмента
У нас все настроено, и теперь мы будем писать код!
Во-первых, как упоминалось ранее, мы должны импортировать установленные библиотеки.
import requests from bs4 import BeautifulSoup import smtplib
В этом случае нам понадобятся две переменные: URL и заголовок.
URL будет ссылкой на наш продукт, а заголовок будет быть User-Agent, который мы собираемся использовать, чтобы иметь доступ к нужной версии браузера и машины. Чтобы узнать свой User-Agent для браузера, вы можете сделать это здесь. Просто замените ссылку после части User-agent и заключите ее в одинарные кавычки, как я.
URL = 'https://www.amazon.de/gp/product/B0756CYWWD/ref=as_li_tl?ie=UTF8&tag=idk01e-21&camp=1638&creative=6742&linkCode=as2&creativeASIN=B0756CYWWD&linkId=868d0edc56c291dbff697d1692708240' headers = {"User-agent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
Далее мы собираемся определить нашу страницу с URL-адресом и заголовком с библиотекой запросов.
page = requests.get(URL, headers=headers) soup = BeautifulSoup(page.content, 'html.parser')
Это приведет к нужной нам ссылке, и теперь нам просто нужно найти элементы на странице, чтобы сравнить их с желаемой ценой.
title = soup.find(id="productTitle").get_text() price = soup.find(id="priceblock_ourprice").get_text()
Чтобы найти элементы на странице, мы используем функцию soup. find () и преобразуем ее в строку с помощью .get_text ().
Title и price мы собираемся сэкономить для вывода программы, чтобы она выглядела хорошо.
К настоящему времени элемент выглядит странно, потому что до и после нужного нам текста слишком много пробелов.
Чтобы исправить это, мы собираемся выполнить некоторые преобразования текста или синтаксический анализ.
Для title мы будем использовать функцию. strip ():
print(title.strip())
И для нашей price .split ():
sep = ',' con_price = price.split(sep, 1)[0] converted_price = int(con_price.replace('.', ''))
Мы используем sep в качестве разделителя в строке цены и преобразуем ее в целое число (целое число).
Теперь мы подошли к лучшей части отправки электронного письма, если цена на самом деле ниже желаемой. Напишем функцию send_email.
Отправить электронное письмо
Эта функция не является обязательной. Если вас пока что устраивает, вы можете просто сделать так, чтобы вы, например, проверяли, не ниже ли цена 200, и распечатываете сообщение, сделайте это следующим образом:
if (price < 200): print("Price has dropped!\n") else: print("Price has not dropped!\n")
В противном случае позвольте мне продолжить отправку электронной почты.
Нам нужно настроить сервер отправки электронной почты, перейти в службу учетной записи google и перейти в Пароли для приложений, там вы должны сгенерировать новый пароль и использовать его в этот маленький сценарий.
Мы также создаем шаблон для электронного письма, которое мы получим.
server = smtplib.SMTP('smtp.gmail.com', 587) server.ehlo() server.starttls() server.ehlo() server.login('EMAIL', 'PASSWORD') subject = 'Price fell down!' body = 'Check the link:\ https://www.amazon.de/gp/product/B0756CYWWD/ref=as_li_tl?ie=UTF8&tag=idk01e-21&camp=1638&creative=6742&linkCode=as2&creativeASIN=B0756CYWWD&linkId=18730d371b945bad11e9ea58ab9d8b32' msg = f"Subject: {subject}\n\n{body}" server.sendmail( 'Price check', 'email-address', msg ) print('Hey Email has been sent!') server.quit()
Теперь, когда мы написали функцию send_mail (), мы можем использовать ее в конце первой функции:
if (price < 200): send_mail() else: print("Price has not dropped!\n")
Когда вы получите письмо, оно будет выглядеть так:
И в Терминале:
Вы также можете реализовать этот сценарий для запуска где-нибудь в Интернете, чтобы он постоянно проверял. Например, вы можете использовать sched.
Полный код находится здесь, в моей учетной записи GitHub:
Готово!
Следующие шаги
Вы можете поднять это приложение на другой уровень, внедрив в него ИИ, чтобы искать товары, похожие на ваши, а затем сравнивать, если цена ниже, и снова отправлять вам электронное письмо.
Но, может быть, в следующий раз 😎
А пока, подписывайтесь на меня, чтобы узнать больше!
Спасибо за внимание!