Проверка доступности продуктов Amazon с использованием Python

Опубликовано: 20 Марта, 2022

Как мы знаем, Python - это многоцелевой язык, широко используемый для написания сценариев. Его использование не ограничивается только решением сложных вычислений, но и автоматизацией повседневных задач. Допустим, мы хотим отслеживать доступность любого продукта Amazon и заключать сделку, когда доступность продукта изменяется, и информировать пользователя о наличии по электронной почте. Будет очень весело написать для этого сценарий Python.

Примечание. Перед запуском скрипта установите необходимые библиотеки (согласно коду). Также обратите внимание, что если продукт в настоящее время недоступен, электронное письмо не будет отправлено пользователю. Asin Id должен быть предоставлен пользователем для продукта, который он хочет отслеживать.

Working of each module used:

-> requests: Used to make HTTP get and post requests
-> time: Used to find current time, wait, sleep
-> schedule: Used to schedule a function to run again after intervals. It is similiar to “setInterval” functionality in JavaScript.
-> smptlib: Used to send email using Python.

Ниже представлена реализация указанного выше проекта:

# Python script for Amazon product availability checker
# importing libraries
from lxml import html
import requests
from time import sleep
import time
import schedule
import smtplib 
  
# Email id for who want to check availability
receiver_email_id = "EMAIL_ID_OF_USER"
  
  
def check(url):
    headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"}
      
    # adding headers to show that you are
    # a browser who is sending GET request
    page = requests.get(url, headers = headers) 
    for i in range(20):
        # because continuous checks in 
        # milliseconds or few seconds
        # blocks your request
        sleep(3
          
        # parsing the html content
        doc = html.fromstring(page.content)
          
        # checking availaility
        XPATH_AVAILABILITY = "//div[@id ="availability"]//text()"
        RAw_AVAILABILITY = doc.xpath(XPATH_AVAILABILITY)
        AVAILABILITY = "".join(RAw_AVAILABILITY).strip() if RAw_AVAILABILITY else None
        return AVAILABILITY
  
      
def sendemail(ans, product):
    GMAIL_USERNAME = "YOUR_GMAIL_ID"
    GMAIL_PASSWORD = "YOUR_GMAIL_PASSWORD"
      
    recipient = receiver_email_id
    body_of_email = ans
    email_subject = product + " product availability"
      
    # creates SMTP session 
    s = smtplib.SMTP("smtp.gmail.com", 587
      
    # start TLS for security 
    s.starttls() 
      
    # Authentication 
    s.login(GMAIL_USERNAME, GMAIL_PASSWORD) 
      
    # message to be sent 
    headers = " ".join(["from: " + GMAIL_USERNAME,
                        "subject: " + email_subject,
                        "to: " + recipient,
                        "mime-version: 1.0",
                        "content-type: text/html"])
  
    content = headers + " " + body_of_email
    s.sendmail(GMAIL_USERNAME, recipient, content)
    s.quit() 
  
  
def ReadAsin():
    # Asin Id is the product Id which 
    # needs to be provided by the user
    Asin = "B077PWK5BT" 
    url = "http://www.amazon.in/dp/" + Asin
    print ("Processing: "+url)
    ans = check(url)
    arr = [
        "Only 1 left in stock.",
        "Only 2 left in stock.",
        "In stock."]
    print(ans)
    if ans in arr:
        # sending email to user if 
        # in case product available 
        sendemail(ans, Asin) 
  
# scheduling same code to run multiple
# times after every 1 minute 
def job():
    print("Tracking...."
    ReadAsin()
  
schedule.every(1).minutes.do(job)
  
while True:
      
    # running all pending tasks/jobs
    schedule.run_pending() 
    time.sleep(1)


Выход:

Отслеживание ....
Обработка: http://www.amazon.in/dp/B077PWK5BT
Остался только 1 на складе.
Отслеживание ....
Обработка: http://www.amazon.in/dp/B077PWK5BT
Остался только 1 на складе.
Отслеживание ....
Обработка: http://www.amazon.in/dp/B077PWK5BT
Остался только 1 на складе.

Обратите внимание, что программа может выдать ошибку (критическое предупреждение безопасности / попытка входа в систему была заблокирована) при отправке почты пользователю, что можно обработать, изменив настройки безопасности в почтовом приложении, которое вы используете.

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.