С помощью msxml2 описывается.XMLHTTP в Excel VBA для извлечения больших объемов текстовых данных с веб-сайта

Я пытаюсь загрузить исторические данные о цене акций из finance.yahoo.com за 1000 акций. На веб-сайте отображается только 60 дней данных на одной странице, поэтому мне нужно пройти через период времени, который я загружаю вместе с циклом для разных ценных бумаг. Я использовал следующий код для доступа к соответствующей странице.

Set httpObject = CreateObject("MSXML2.XMLHTTP")
httpObject.Open "GET", url, False
httpObject.send
webObject.body.innerHTML = httpObject.responseText

это работает как шарм для 99% данных, к которым я обращаюсь. Но время от времени объект, возвращаемый веб-сайтом, оказывается быть пустым, даже если тот же самый URL покажет мне правильные данные в Internet Explorer. Если я перезапущу код только для этого URL-адреса, он может или не может потерпеть неудачу в следующий раз.

Я хотел бы знать, есть ли более стабильный/последовательный способ использования вышеуказанного метода. Ранее я реализовал InternetExplorer.Метод приложения для загрузки данных, но обнаружил, что это намного медленнее и громоздко.

2 ответов


проверить readyState.

httpObject.ReadyState = 4

это означает, что загрузка завершена. Затем вы можете проверить статус

httpObject.Status = 200

это означает, что вы не испортили URL. Если readystate равен 4, а status-200, вы можете прочитать responseText.


у меня была та же проблема, получив пустой repsonse, с .Status = 0 (т. е. Ok). Моей проблемой оказалось то, что http при заходе в браузер перенаправляет на https. Когда я изменил его в моей просьбе, все было в порядке.

для общей функции вы можете попробовать http, и если вы получите .Status = 0 и .responseText = "", затем повторите, но с https.