Excel Web Query Crawler - Makro um aus Website Daten zu extrahieren?

... komplette Frage anzeigen

1 Antwort

Die Seite eignet sich vom Aufbau her nicht für eine Datenverbindung (Daten > Daten aus Web). Über den Quelltext die Daten auslesen ist möglich, ich finde so was aber immer etwas wackelig. Soll die Exceltabelle professionell verwendet werden? Dann wäre eine direkt abfragbare Quelle ratsam.

Nach dem Wort Gold suchen ist nicht eindeutig. In der Tabelle solltest Du noch eine Spalte aufnehmen, mit dem tatsächlichen Suchbegriff, mit dem sich der Höchstwert im Quelltext finden lässt. Die Seite verwendet immer eine ID je Rohstoff, der Tag für den Höchstpreis ist z.B. pid-8830-high für Gold.

Ich habe einen vorhandenen Code für Quelltextauslesen leicht angepasst. Das eigentlich "spannende" ist das Ausschneiden der richtigen Passage - die beiden Zeilen mit cells(i,3).value...
erst mal die Stelle finden mit pid-8830-high
dann das Ende der Zahl ermitteln.  Das geht vermutlich auch in einem Schritt, war mir aber jetzt zu aufwändig.
Da neben "normalem" Format auf der Seite auch 19,220 o.ä. als Zahl verwendet wird, noch runden auf 2 Nachkommastellen.

Was Du anpassen musst die die Zahlen jeweils bei cells(i,2) oder cells(i,3)
2 = Spalte 2 sprich B bzw. 3 -> C

cells(i,2) ist die Spalte mit den Suchbegriffen wie pid-8830-high
Cells(i,3) ist die Spalte, wohin der Preis geschrieben werden soll.

Sub lesen()
Set appIE = CreateObject("InternetExplorer.Application")
i = 2 'das ist die Zeile mit dem ersten Eintrag (ohne Überschriften also)
surl = "http://de.investing.com/commodities/rohstoffe-futures"
appIE.navigate surl
Do: Loop Until appIE.Busy = False
Do: Loop Until appIE.Busy = False
stxt = appIE.document.DocumentElement.outerHTML
While Cells(i, 2).Value <> ""
Cells(i, 3).NumberFormat = "#,##0.00"
Cells(i, 3).Value = Mid(stxt, InStr(stxt, Cells(i, 2).Value) + Len(Cells(i, 2).Value) + 2, 10)
Cells(i, 3).Value = Round(Left(Cells(i, 3).Value, InStr(1, Cells(i, 3).Value, "<") - 1), 2)
i = i + 1
Wend
Set appIE = Nothing
Close
End Sub

Die Suchbegriff hab ich noch extrahiert. Es ist die Standardreihenfolge beim Aufrufen der Seite.

pid-8830-high
pid-68-high
pid-8836-high
pid-8831-high
pid-8910-high
pid-8883-high
pid-8849-high
pid-8833-high
pid-8862-high
pid-8988-high
pid-954867-high
pid-8861-high
pid-49768-high
pid-956470-high
pid-959207-high
pid-959208-high
pid-959211-high
pid-959209-high
pid-8917-high
pid-13916-high
pid-8918-high
pid-8916-high
pid-8915-high
pid-8919-high
pid-8851-high
pid-8894-high
pid-8832-high
pid-8869-high
pid-8891-high
pid-8914-high
pid-8913-high
pid-961618-high
pid-959198-high
pid-959199-high

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von hayla44
15.09.2016, 22:22

Hi Ninombre! Wow, hat super funktioniert mit deinem Beispiel, danke sehr!

Aber trotzdem bleibt leider noch meine Originalfrage: Wie kann ich die Kurse erhalten, wenn ich nicht "pid-959199-high" usw in der Suchspalte (z.B. B) schreibe , sondern als Suchbegriffe die Namen wie Gold etc. nutzen möchte? Denn ansprechend sieht das zum präsentieren nicht aus wenn ich den exakten Linknamen wie pid-3434334 eintrage, weiss niemand was dahintersteckt.

Es interessiert mich sehr, gibt es eine clevere Methode, den Makro so zu stellen, dass er nach allen Namen in meiner Spalte B sucht, also z.b. nach "Platinum" etc. (die ja auch eindeutig sind, kommen nur ein mal vor in der web tabelle) und dann einfach 3 schritte nach rechts zum nächsten Textblock/Spalte wandert um dortige Information zu extrahieren (also der "Hoch"-Kurs wäre 3 spalten weiter rechts )?

Oder andersrum, dass der makro nach der "Hoch" Spalte sucht (wort "hoch" kommt nur einmal vor dort) und dann alle werte dadrunter durchliest und immer die extrahiert, die links zu einem Namen gehören, das auch in meiner Excel Spalte vorkommt...

Gibts da irgendwelche Lösung? Danke dir schon mal für dein Rat!

0

Was möchtest Du wissen?