web-dev-qa-db-ja.com

Excel VBAでMSXML2.XMLHTTPを使用してWebサイトから大量のテキストデータを抽出する

1000株について、finance.yahoo.comから過去の株価データをダウンロードしようとしています。 Webサイトでは1ページに60日間のデータしか表示されないため、さまざまな証券のループに合わせて、ダウンロードしている期間をループする必要があります。次のコードを使用して、関連するページにアクセスしました。

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

これは、私がアクセスするデータの99%の魅力のように機能します。しかし、時々、まったく同じURLでInternet Explorerに正しいデータが表示されても、Webサイトから返されるオブジェクトは空であることが判明します。そのURLのみのコードを再実行すると、次回は失敗する場合と失敗しない場合があります。

上記の方法を使用するより安定した/一貫した方法があるかどうか知りたいのですが。以前にInternetExplorer.Applicationメソッドを実装してデータをダウンロードしていましたが、速度が遅く扱いにくいことがわかりました。

8
sinhars82

レディステートを確認してください。

httpObject.ReadyState = 4

つまり、読み込みが完了しました。次に、ステータスを確認できます

httpObject.Status = 200

つまり、URLをめちゃくちゃにしていないということです。 readystateが4で、statusが200の場合、responseTextを読み取ることができます。

7
Dick Kusleika

同じ問題があり、.Status = 0(つまりOK)で空の応答が返されました。私が判明した問題は、ブラウザーにアクセスしたときにhttpがhttpsにリダイレクトされることでした。私のリクエストで変更したときは問題ありませんでした。

一般的な関数の場合は、httpを試して、.Status = 0.responseText = ""を取得した場合は、httpsで繰り返します。

1
Paul