Примечание редакторам 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:



Готово!

Следующие шаги

Вы можете поднять это приложение на другой уровень, внедрив в него ИИ, чтобы искать товары, похожие на ваши, а затем сравнивать, если цена ниже, и снова отправлять вам электронное письмо.
Но, может быть, в следующий раз 😎

А пока, подписывайтесь на меня, чтобы узнать больше!

Спасибо за внимание!