Verwenden von MSXML2.XMLHTTP in Excel VBA zum Extrahieren großer Mengen von Textdaten von der Website

8

Ich versuche, historische Aktienkursdaten von finance.yahoo.com für 1000s Aktien herunterzuladen. Die Website zeigt nur 60 Tage Daten auf einer einzelnen Seite an, so dass ich die Zeitperiode, in der ich lade, zusammen mit der Schleife für verschiedene Wertpapiere durchlaufen muss. Ich habe den folgenden Code verwendet, um auf die entsprechende Seite zuzugreifen.

%Vor%

Das funktioniert wie ein Zauber für 99% der Daten, auf die ich zugreife. Aber hin und wieder stellt sich heraus, dass das von der Website zurückgegebene Objekt leer ist, obwohl die exakt gleiche URL mir die richtigen Daten im Internet Explorer anzeigt. Wenn ich den Code nur für diese URL erneut durchführe, kann es beim nächsten Mal fehlschlagen.

Ich würde gerne wissen, ob es eine stabilere / konsistentere Art der Verwendung der obigen Methode gibt. Ich hatte zuvor die InternetExplorer.Application-Methode implementiert, um Daten herunterzuladen, fand diese aber viel langsamer und umständlicher.

    
sinhars82 02.03.2014, 08:10
quelle

2 Antworten

7

Überprüfen Sie den Bereitschaftszustand.

%Vor%

Das bedeutet, dass es geladen wird. Dann können Sie den Status

überprüfen %Vor%

Das heißt, Sie haben die URL nicht durcheinander gebracht. Wenn readystate 4 ist und status 200 ist, können Sie den responseText lesen.

    
Dick Kusleika 02.03.2014, 16:05
quelle
1

Ich hatte das gleiche Problem, eine leere Antwort bekommen, mit .Status = 0 (d. h. Ok). Mein Problem war, dass das http, wenn Sie in den Browser gehen, zu https umleitet. Als ich es in meiner Anfrage änderte, war es in Ordnung.

Für eine generische Funktion könnten Sie versuchen, http und wenn Sie .Status = 0 und .responseText = "" erhalten, dann wiederholen Sie aber mit https.

    
Paul 19.09.2015 08:09
quelle