AMAZON | verfügbare Anzahl eines Atrtikels auslesen

kaiwe

Neu angemeldet
Registriert
31 Aug. 2016
Beiträge
9
Hallo zusammen,

ich möchte täglich die Anzahl der verfügbaren Stückzahl bei mehreren Artikeln beobachten.

Nachdem das händisch ein "Mega Aufwand" ist, bin ich auf der Suche nach einer Möglichkeit,
das zu automatisieren.

Die API von AMAZON erlaubt dies nicht, ebensowenig habe ich bei GOOGLE was passendes
gefunden.

Kann mir bitte jemand helfen ?
 
Im Artikel ist die Menge erkennbar an

[src=html5]
<div id="availability" class="a-section a-spacing-none">
<span class="a-size-medium a-color-success">
Nur noch 12 auf Lager
</span>
</div>
[/src]

Also eine Liste der URLs oder einen URL-Generator mit den IDs bauen, per AJAX o.ä. HTTPREQUESTen, den DOM Tree parsen und auslesen oder den parseInt() des innerHTML des ersten Kindes bzw SPANs der ID #availability nehmen.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #3
Hallo Jester,

vielen Dank für Deine schnelle Antwort ! Leider ist die Sache sehr viel komplexer.

Bei vielen Artikeln steht nämlich nichts bzw. "Auf Lager", dann muss man einen Trick anwenden.

Man legt 1 Stück in den Warenkorb, ändert dann im Warenkorb die Menge auf 10+, dann erscheint
ein Eingabefeld, in welches man 999 schreibt.

Daraufhin gibt es eine "Fehlermeldung" in der Art:

"Bei diesem Anbieter sind derzeit nur 78 Exemplare verfügbar. Möchten Sie eine größere Menge bestellen,
kehren Sie bitte zur Produktseite zurück, um zu prüfen, ob ein weiterer Händler Ihre gewünschte Menge anbietet."

Ich will den Wert "78" auslesen und dabei den gesamten Prozess automatisieren.

Vielen Dank !


AMAZON_verfuegbare-Menge.jpg
 
Zuletzt bearbeitet:
Das wird aufwändiger, aber nicht unmöglich. Im Prinzip muss deine Anwendung nur exakt das Gleiche machen.

[src=text]Rufe Produktseite auf
Prüfe ob eine Anzahl angegeben ist
falls ja
gib die Anzahl zurück
sonst
lege das Produkt in Warenkorb
erhöhe die Stückzahl auf 999
parse Fehlermeldung
entferne das Produkt aus dem Warenkorb
gib die Anzahl zurück[/src]

Das was für dich aufwändig sein wird, ist wahrscheinlich das Interface. Das kannst du aber beim Programmieren vernachlässigen.
Das Interface wird ja nur für den Anwender geschrieben, damit dieser so bequem wie möglich auswählen kann, was er möchte.
Deine Anwendung ist allerdings selbstständig genug um gleich als gewünschte Anzahl 999 auszuwählen.
Ggf. musst du mit einem Login arbeiten, ich weiß nicht auswendig, an welcher Stelle Amazon einen Login erfordert.
Im Prinzip werden das alles nur AJAX-Requests, die du entsprechend auswerten musst.
 
  • Thread Starter Thread Starter
  • #5
Hallo virtus,

ich möchte jetzt nicht in ein Fettnäpfchen treten, aber es überrascht mich doch ein ganz klein wenig,
dass Du mir scheinbar auch jenen winzig kleinen Funken rudimentärer Restintelligenz - der nötig ist,
um den strukturellen Ablauf dieser Aufgabe intellektuell zu erfassen und zu dokumentieren - absprichst.

Aber jetzt im Ernst:

Mein Problem ist es, nicht in den Tiefen der AJAX Programierung beheimatet zu sein.

Anders ausgedrückt: Ich bin auf der Suche nach Hilfe beim konkreten Erstellen eines solchen Scripts.

Natürlich auch gegen eine kleine Gebühr, obwohl ich dann ( SORRY !!!!!!! ) hier vielleicht im falschen
Bereich poste.
 
Ich hab das Ganze mal schnell in Python runtergeschrieben. Funktioniert so:
  • Produktseite aufrufen
  • das "In den Warenkorb legen" Formular parsen, 999 einsetzen und absenden
  • die genaue Zahl aus der Fehlermeldung ziehen.
Alles in Allem 50 Zeilen. Die Ergebnisse speichern und auswerten überlasse ich anderen.

@kaiwe: Ich empfehle dir, den Code genau anzuschauen. Gerade für solche Automatisierungen ist Python wie geschaffen. Das Prinzip kann man schnell auch auf andere Probleme übertragen.

[src=python]import requests
from BeautifulSoup import BeautifulSoup
import re


headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0",
"Accept-Language": "de,en-US;q=0.7,en;q=0.3"
}


def check_amazon_status(url):
# Produktseite abrufen
s = requests.Session()
print ">>",url
response = s.get(url, headers=headers)

# Das "Zum Warenkorb hinzufuegen"-Formular nachbauen -
# dazu suchen wir alle <input>-Tags und speichern die in "values"
form = BeautifulSoup(response.text).findAll('form', id='addToCart')
form = form[0]
url2 = 'https://www.amazon.de' + form['action']
values = {}

for field in form.findAll('input'):
if not field.has_key('name') or not field.has_key('value'):
continue
if field['type'] != 'submit':
values[field['name']] = field['value']
elif field['name'] == 'submit.add-to-cart':
values[field['name']] = field['value']
# quantity ueberschreiben wir mit 999, um den Fehler zu provozieren
values['quantity'] = '999'

# Zum Warenkorb hinzufuegen - wir senden das nachgebaute Formular
print ">>",url2
response = s.post(url2, headers=headers, data=values)

# wir nutzen einen regulaeren Ausdruck, um die Antwort im Text zu suchen. Nicht effizient, aber leicht zu coden.
match = re.search(r'momentan lediglich: (\d+)\.', response.text)
if match == None:
print "Keine Fehlermeldung gefunden!"
return None
print '-->',match.group(0) # der gefundene Text
return int(match.group(1)) # die gefundene Zahl im Text


# Beispiel
print check_amazon_status('https://www.amazon.de/Das-schwarze-Auge-Drakensang-Platinum/dp/B00553J2PQ/ref=sr_1_1?ie=UTF8&qid=1472735369&sr=8-1&keywords=drakensang')
[/src]
Der Code basiert auf Python 2 (nicht 3). Außerdem muss requests und BeautifulSoup installiert sein (gibt's beides über pip).
 
  • Thread Starter Thread Starter
  • #8
Hallo Rakorium-M,

vielen, vielen Dank für Deine Hilfe !!! Ich habe jetzt leider überhaupt keine Ahnung von Python ;-((
Aber ich werde mich da jetzt ganz schnell einarbeiten ;-)

Auf meiner LINUX Entwicklungsmaschine habe ich ein Python 2.7.8

Der Befehl >>> print "Python lernen!" klappt schon mal;-)
 
Zuletzt bearbeitet:
Gern geschehen. Gerade für solche Automatisierungs-Funktionen ist Python einfach praktisch - ist eine gute Idee, dich darin mal einzuarbeiten :)
 
ich möchte jetzt nicht in ein Fettnäpfchen treten, aber es überrascht mich doch ein ganz klein wenig,
dass Du mir scheinbar auch jenen winzig kleinen Funken rudimentärer Restintelligenz - der nötig ist,
um den strukturellen Ablauf dieser Aufgabe intellektuell zu erfassen und zu dokumentieren - absprichst.
Da du explizit die eine API von Amazon angesprochen hast, bin ich erst mal davon ausgegangen, dass Programmierkenntnisse vorhanden sind.
Da du von "mega Aufwand" gesprochen hast, bin ich davon ausgegangen, dass du lediglich Probleme mit der Umsetzung hast und dir die Lösung komplexer machst/ vorstellst, als nötig.

Anders ausgedrückt: Ich bin auf der Suche nach Hilfe beim konkreten Erstellen eines solchen Scripts.
Das wurde aus deinem Posting nicht ganz klar, aber wie du siehst (vgl Beitrag von Rakorium-M), ist es gar nicht so kompliziert.
 
Zurück
Oben