Zephyrnet-logo

Amazon-prijsvolgsysteem met Python

Datum:

Bron afbeelding: Link

I

In dit artikel zullen we leren hoe we Python kunnen gebruiken om onze ‘wanna-buy’-items op Amazon bij te houden. We hebben de neiging om het product alleen te kopen als het onder een bepaalde drempelprijs ligt, om het binnen ons budget te houden en onze besparingen te maximaliseren. In dit project zullen we dat idee precies implementeren en een Amazon-prijsvolgsysteem bouwen met behulp van Python.

Dus in dit artikel zullen we een programma maken dat de webpagina van het product dat we willen op Amazon schrapt en controleert of de huidige prijs lager is dan of gelijk is aan wat we willen. Zo ja, dan wordt dit ons ook per e-mail op de hoogte gesteld.

L

Om onze taak te volbrengen, zullen we de hulp inroepen van enkele vooraf gedefinieerde bibliotheken in Python. Zij zijn :

verzoeken

MooieSoep (bs4)

smtplib

Een korte informatie over verzoeken in Python

Beeldbron: link

In lekentaal: de Aanvragen bibliotheek wordt gebruikt om m

De module Python-verzoeken heeft verschillende ingebouwde methoden voor het maken van HTTP-verzoeken naar een bepaalde URI met behulp van de GET-, POST-, PUT-, PATCH- of HEAD-protocollen. Een HTTP-verzoek wordt gebruikt om gegevens uit een bepaalde URI te halen of om gegevens naar een server te produceren. Tussen een client en een server functioneert het als een verzoek-antwoordprotocol.

U kunt hier meer naar hun documentatie verwijzen: link

Een korte uitleg over Mooie Soep in Python: 

Amazon-prijsvolgsysteem

Beeldbron: Link

U kunt Beautifure op een leesbare en hiërarchische wijze beschouwen.

U kunt de documentatie hier raadplegen:  link

Nu u bekend bent, laten we beginnen!

De afhankelijkheden importeren

Laten we de noodzakelijke afhankelijkheden importeren die we in de toekomst gaan gebruiken.

importaanvragen
van smtplib import SMTP
van bs4 importeer BeautifulSoup als BS

De implementatie van deze bibliotheken zal voor u duidelijk worden zodra we ze gaan gebruiken. Blijf dus bij mij.

De pagina laden waarvan we de gegevens willen extraheren

Laten we de link van het product dat we willen kopen opslaan in een variabele met de naam “URL”.

URL = 'https://www.amazon.in/Acer-Nitro-23-8-1080-0-5-Response/dp/B088FLG41L/ref=sr_1_18?crid=2RUS8ZJDNRU05&keywords=monitor&qid=1652971294&sprefix=monitor%2Caps%2C296&sr=8-18'

Houd er rekening mee dat u deze link naar wens moet wijzigen.

Om het verzoek uit te voeren, moet u vervolgens de user-agent opgeven, anders geeft Amazon een 503-fout. Om dit te voorkomen, slaat u de user-agentwaarde op in het veld 'headers'

page = verzoeken.get(URL ,headers={"User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, zoals Gecko) Chrome/101.0.4951.67 Safari/537.36"})

Wat dit doet is de HTML-broncode ophalen van de link die we eerder hadden genoemd.

De gegevens op de 'pagina' zullen er ongeveer zo uitzien. :

b'nnnnn

nn

nn nn

n

n n

Voer de tekens in die u hieronder ziet

n

Sorry, we moeten er zeker van zijn dat je geen robot bent. Voor de beste resultaten dient u ervoor te zorgen dat uw browser cookies accepteert.

n

n

nn

Hier bevat het de gegevens op een ongeformatteerde manier. Om dat te ondervangen, gaan we het analyseren en opslaan in een variabele soep.

soep = bs(pagina.inhoud,"html.parser")

Maar we zijn niet geïnteresseerd in de volledige broncode. We willen alleen de ID van de prijs. We kunnen de ID gemakkelijk vinden door het element te inspecteren. Tegelijkertijd zullen we ook de waarde die we krijgen aanpassen, zodat deze de exacte waarde retourneert die we willen. We slaan de waarde ook op in een variabele.

prijs = float(soup.find(id=prijsblok-onzeprijs).text.split()[1].replace(",",""))

Dit geeft de prijs van ons product terug.

13999.0

Het hele stuk opslaan onder een gemeenschappelijke functie voor eenvoudiger toegang en verwerking.

def extract_current_price(): page = request.get(URL ,headers={"User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, zoals Gecko) Chrome/101.0.4951.67 Safari /537.36"}) soup = bs(page.content,"html.parser") price = float(soup.find(id="priceblock-ourprice").text.split()[1].replace("," ,"")) retourprijs

Werkt voor onze e-mailservice

Amazon-prijsvolgsysteem

Alleen het controleren van de huidige prijs is niet alles. We willen ook dat de code ons een e-mail stuurt als deze onder onze budgetprijs komt.

Dus laten we daar de code voor instellen.

We moeten een server opzetten om het verzenden van e-mail mogelijk te maken. Wij zullen gebruik maken van de SMTP(Simple Mail Transfer Protocol) hier. Omdat ik Gmail ga gebruiken, heb ik de volgende configuraties nodig.

SMTP_SERVER = "smtp.gmail.com"

Vervolgens moeten we de poort instellen. Door te googlen kun je ontdekken dat voor deze specifieke taak de poort die we hiervoor nodig hebben 587 is.

POORT = 587

En we zullen ook de e-mail specificeren van waaruit we de notificatie-e-mail willen verzenden.

E-MAIL = "[e-mail beveiligd]" WACHTWOORD = "UW_WACHTWOORD"

Om de beveiliging in te stellen, kunt u uw wachtwoord vervangen en in plaats van het e-mailwachtwoord het app wachtwoord. Bekijk hier meer over app-wachtwoord Link.

De server instellen:

server = SMTP(SMTP_SERVER, POORT)

En om de beveiliging van de transportlaag mogelijk te maken en een beveiligd kanaal te starten:

server.starttls()

Ga nu verder met inloggen op e-mail,

server.login(EMAIL_ID, WACHTWOORD)

Nu moeten we ook het concept instellen voor de e-mail die we gaan verzenden:

subject = "Prijs verlaagd!! Moet nu kopen!" body = "De prijs van het gewenste product is gedaald. U kunt overwegen het nu te kopen. " +URL

Combineer nu beide om de totale boodschap te krijgen

msg = f"Onderwerp: {onderwerp}nn{body}"

Eindelijk de mail verzonden:

server.sendmail(EMAIL_ID, TO_EMAIL_ID, bericht)

TO_EMAIL_ID is het e-mailadres waarnaar u de e-mail wilt verzenden.

Nadat dit allemaal is gedaan, moeten we de server sluiten.

server.quit()

Nu eindelijk ook hiervoor een functie creëren,

def notificatie_mail(): SMTP_SERVER = "smtp.gmail.com" POORT = 587 EMAIL = "[e-mail beveiligd]" PASSWORD="YOUR_PASSWORD" server = SMTP(SMTP_SERVER, PORT) server.starttls() server.login(EMAIL_ID, PASSWORD) subject = "Prijs verlaagd!! Moet nu kopen!" body = "De prijs van het gewenste product is gedaald. Je kunt overwegen om het nu te kopen. " +URL msg = f"Onderwerp: {subject}nn{body}" server.sendmail(EMAIL_ID, TO_EMAIL_ID, msg) server.quit()

Implementatie van het concept van budgetprijs

Nu moeten we het concept aanvullen, waarbij we de post versturen als de huidige prijs van het product onder onze budgetprijs komt.

Laten we bedenken dat onze budgetprijs 10000 Rs is. (U kunt het budget wijzigen in elke gewenste waarde).

BUDGET_PRICE = 10000 #Plaats hier de gewenste waarde als extract_current_price<=BUDGET_PRICE: kennisgeving_mail()

Conclusie

Dus daarmee is ons project op het Amazon-prijsvolgsysteem voltooid. In dit artikel hebben we gezien hoe we web-scraping kunnen uitvoeren met behulp van Python's Beautiful Soup, en hoe we de webpaginagegevens in onze code kunnen ophalen. We begrepen en implementeerden ook het concept van het verzenden van e-mail met behulp van de SMTP-module in Python

Toekomstige reikwijdte/mogelijke toevoegingen aan dit project

Dingen die ik zal weglaten zodat je ze kunt proberen zijn:

1) Voeg een component toe waarmee de code regelmatig kan worden uitgevoerd na een specifiek tijdsinterval (bijvoorbeeld dagelijks)

2) En nog een ding dat u kunt doen, in plaats van de emn hardcode vrij te geven, en ze uit een bestand in de lokale opslag te extraheren.

Dat is het voor nu. Als u nog vragen heeft over het Amazon-prijsvolgsysteem, kunt u contact met mij opnemen via

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?