С помощью 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.