AW: Erfassung ASIN
13.08.2019 16:46:35
Zwenn
Hallo Rolf,
Dann hast Du für Ebay ja schonmal ein funktionierendes Werkzeug gefunden ;-)
Amazon ist so ziemlich die grützigste Seite, die man auslesen kann, um es nett auszudrücken. Es gibt so einige Sonderfälle, die Du hoffentlich nicht abdecken musst.
Wenn Du die gesponserten Suchtreffer aussortieren willst, musst Du das während des Durchgehens der Liste aller Suchtreffer machen. Um alle Suchtreffer zu prüfen, musst Du dabei über alle div-Tags gehen und auf das Attribut data-index prüfen, mit dem alle Suchtreffer durchnummeriert sind.
Ich entwickle selber grade ein sehr aufwändiges Amazon-Tool für einen Kunden und habe Dir mal die entsprechenden Passagen für Deine Zwecke zusammenkopiert:
Sub AmazonASINsAuslesen()
'Für den Internetzugriff
Dim browser As Object
Dim url As String
Dim knotenStamm As Object
Dim knotenDiv As Object
'ASIN-Handling
Dim asin As String
Dim dataIndexErsteNull As Boolean
Dim istGesponsert As Boolean
'Abgekürzte Amazon URL zu Suchtreffern
'ACHTUNG: Mit dieser Schreibweise ist nur die
'erste Seite aller Suchtreffer aufrufbar
url = "https://www.amazon.de/s?k=4011097641904"
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'Alle Div-Tags in NodeCollection schreiben, um Listen-Abschnitte zu identifizieren
Set knotenStamm = browser.document.getElementsByTagName("div")
If Not knotenStamm Is Nothing Then
'Alle Div-Tags durchgehen und auf Attribut data-index prüfen
For Each knotenDiv In knotenStamm
'Mit data-index sind alle Suchtreffer durchnummeriert
If knotenDiv.hasAttribute("data-index") Then
'Es kann vorkommen, dass unter der Liste mit den echten Suchtreffern weitere Listen
'auftauchen, die willkurliche Ergebnisse zu alternativen Suchtermen anzeigen
'Diese beginnen den data-index für ihre Trefferzählung wieder bei 0
'Deshalb wird beim finden des ersten data-Index mit dem Wert 0 eine Prüfvariable
'auf true gesetzt. Ist die Prüfvariable dataIndexErsteNull bereits true, wird die
'Schleife für diesen Suchterm abgebrochen
If dataIndexErsteNull Then
If knotenDiv.getAttribute("data-index") = 0 Then
Exit For
End If
Else
If knotenDiv.getAttribute("data-index") = 0 Then
dataIndexErsteNull = True
End If
End If
'Aktuellen Knoten auf "Gesponsert" prüfen
istGesponsert = PruefenObGesponsert(knotenDiv)
If istGesponsert = False Then
'ASIN holen, wenn aktueller Knoten nicht gesponert ist
'Für das Beispiel wird zur Verarbeitung der gefundenen
'ASINs ein Ausgabestring aufgebaut
If Len(asin) = 0 Then
'Wenn erste ASIN, ohne Zeilenumbruch übernehmen
asin = Trim(knotenDiv.getAttribute("data-asin"))
Else
'Wenn weitere ASIN, untereinander fortführen
asin = asin & Chr(13) & Trim(knotenDiv.getAttribute("data-asin"))
End If
End If
End If
Next knotenDiv
Else
'Keine Suchtreffer
MsgBox "Keine Liste mit Suchtreffern auf der geladenen Seite gefunden."
End If
'Ergebnisstring zur Sichtkontrolle ausgeben
MsgBox asin
End Sub
Function PruefenObGesponsert(htmlKnoten As Object) As Boolean
Dim ergebnis As Boolean
If InStr(1, htmlKnoten.innertext, "Gesponsert") > 0 Then
ergebnis = True
End If
PruefenObGesponsert = ergebnis
End Function
Damit solltest Du klar kommen. Ich kann Dir aus eigener Erfahrung sagen, dass es auch zu EANs mitunter mehrere gültige Suchtreffer gibt. Deshalb habe ich direkt eingebaut, wie alle eingesammelt werden. Wie Du die einzelnen ASINs sammelst oder jede sofort weiter verarbeitest, bekommst Du mit Deinem VBA-Lvl sicher gut hin.
Viele Grüße,
Zwenn