Использование 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.