Использование 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.Application для загрузки данных, но обнаружил, что он намного медленнее и громоздок.

2 ответа

Решение

Проверьте состояние.

httpObject.ReadyState = 4

это означает, что он загрузился. Тогда вы можете проверить статус

httpObject.Status = 200

это означает, что вы не испортили URL. Если readystate равен 4, а статус равен 200, тогда вы можете прочитать ответный текст.

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

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

Другие вопросы по тегам