Beschikbaarheid van Amazon-producten controleren met Python

| | | | | |

Zoals we weten, is Python een multifunctionele taal die veel wordt gebruikt voor scripts. Het gebruik ervan is niet alleen beperkt tot het oplossen van complexe berekeningen, maar ook tot het automatiseren van alledaagse taken. Laten we zeggen dat we de beschikbaarheid van elk Amazon-product willen volgen en een deal willen sluiten wanneer de beschikbaarheid van het product verandert, en de gebruiker ook per e-mail op de hoogte willen stellen van de beschikbaarheid. Het zal erg leuk zijn om hiervoor een Python-script te schrijven. Opmerking. Installeer de vereiste bibliotheken (volgens de code) voordat u het script uitvoert. Houd er ook rekening mee dat als het product momenteel niet beschikbaar is, er geen e-mail naar de gebruiker wordt verzonden. De Asin-ID moet door de gebruiker worden opgegeven voor het product dat ze willen volgen.

Werking van elke gebruikte module:
  • -> verzoeken: wordt gebruikt om HTTP get en post te maken verzoeken
  • -> tijd: wordt gebruikt om de huidige tijd te vinden, wacht, slaap
  • -> schema: wordt gebruikt om te plannen dat een functie na intervallen opnieuw wordt uitgevoerd. Het is vergelijkbaar met de "setInterval"-functionaliteit in JavaScript.
  • -> smptlib: Gebruikt om e-mail te verzenden met Python.

# Python-script voor Amazon productbeschikbaarheidscontrole # bibliotheken importeren uit lxml import html importverzoeken van time import sleep import time import schedule import smtplib # Email id voor wie de beschikbaarheid wil controleren 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`} # headers toevoegen om aan te tonen dat u # een browser bent die een GET-verzoek verzendt page = requests.get(url, headers = headers) for i in range(20): # omdat continue controles in # milliseconden of een paar seconden # blokkeert uw verzoek slaap (3) # ontleden van de html-inhoud doc = html.fromstring(pagina .content) # beschikbaarheid controleren XPATH_AVAILABILITY = `//div[@id ="beschikbaarheid"]//text()` RAw_AVAILABILITY = doc.xpath(XPATH_AVAILABILITY) BESCHIKBAAR ITY = ``.join(RAw_AVAILABILITY).strip() if RAw_AVAILABILITY else Geen return BESCHIKBAARHEID def sendemail(ans, product): GMAIL_USERNAME = "YOUR_GMAIL_ID" GMAIL_PASSWORD = "YOUR_GMAIL_PASSWORD" ontvanger = receiver_email_id body_of_email_id body_of_email_id body_of_email_id body_of_email_id ` # maakt SMTP-sessie s = smtplib.SMTP(`smtp.gmail.com`, 587) # start TLS voor beveiliging s.starttls() # Authenticatie s.login(GMAIL_USERNAME, GMAIL_PASSWORD) # te verzenden bericht headers = " " .join(["from: " + GMAIL_USERNAME, "subject: " + email_subject, "to: " + receiver, "mime-version: 1.0", "content-type: text/html"]) content = headers + " " + body_of_email s.sendmail(GMAIL_USERNAME, receiver, content) s.quit() def ReadAsin(): # Asin Id is de product Id die # door de gebruiker moet worden opgegeven Asin = `B077PWK5BT` url = "http:// www.amazon.in/dp/" + Asin print ("Verwerking: "+url) ans = check(url) arr = [ `Nog maar 1 op voorraad.`, `Nog 2 op voorraad.`, `Op voorraad .`] print(ans) if ans in arr: # s beëindigen van e-mail naar gebruiker indien # indien product beschikbaar sendemail(ans, Asin) # planning dezelfde code meerdere keren # keer uitvoeren na elke minuut def job(): print("Tracking....") ReadAsin() schedule.every (1).minutes.do(job) while True: # alle openstaande taken/taken uitvoeren schedule.run_pending() time.sleep(1) 

Output:

Tracking.. .. Verwerking: http://www.amazon.in/dp/B077PWK5BT Nog maar 1 op voorraad. Tracking.... Verwerking: http://www.amazon.in/dp/B077PWK5BT Nog maar 1 op voorraad. Tracking.... Verwerking: http://www.amazon.in/dp/B077PWK5BT Nog maar 1 op voorraad. 

Hoe maak je een voorraadbeschikbaarheidscontrole met python-verzoeken als JavaScript wordt gebruikt?

StackOverflow-vraag

Ik heb een code geschreven die moet controleren of een product weer op voorraad is en wanneer dit het geval is, stuur me dan een e-mail om me op de hoogte te stellen. Dit werkt als de dingen die ik zoek in de html staan.

Soms worden bepaalde objecten echter via JavaScript geladen. Hoe kan ik mijn code bewerken zodat webscraping ook werkt met JavaScript?

Dit is mijn code tot nu toe:

import tijd import verzoeken terwijl True: # Haal de url van de IKEA-pagina op url = `https://www.ikea.com/nl/nl/p/flintan-bureaustoel-vissle-zwart-2036841/` # Haal de tekst van die pagina en zet alles in kleine letters productpage = requests.get(url).text.lower() # Stel de strings in die op de pagina moeten staan als het product niet beschikbaar is outofstockstrings = [`niet beschikbaar voor levering`, `alleen beschikbaar in de winkel `] # Controleer of de strings zijn in de tekst van de webpagina if elke(x in productpagina voor x in outofstockstrings): time.sleep(1800) doorgaan anders: # stuur me een e-mail en verbreek de lus 

Antwoord:

In plaats van de HTML te schrapen en te analyseren, zou je de onofficiële voorraad kunnen gebruiken API die de IKEA-website ook gebruikt. Die API retourneert JSON-gegevens die veel gemakkelijker te analyseren zijn en je krijgt ook schattingen wanneer het product weer op voorraad komt.

Er is zelfs een project geschreven in javascript / node dat je dit soort informatie biedt rechtstreeks vanaf de opdrachtregel: https://github.com/Ephigenia/ikea-availability-checker< /a>

In alle winkels in Nederland kunt u eenvoudig de voorraad van de stoel controleren:

npx ikea-availability-checker stock --country nl 20336841 

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method