人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ExcelのVBAで、「e-hon」というサイトのhtmlを取得しようとするとエラーが出ます。

どうしたら問題なく取得できるでしょうか。


◆エラーの表示
実行時エラー'-1072896658(c00ce56e)':
システムエラー:-1072896658

◆ソース
url="http://www.e-hon.ne.jp/bec/SA/Detail?refShinCode=0100000000000033099016&Action_id=121&Sza_id=C0"
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url, False
http.Send
html = http.responseText


●質問者: tetlis
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●200ポイント

これ、別の形ですけど、はまったことあります。
ぼくの他にも、はまった人を見つけた。
http://d.hatena.ne.jp/kusakari/20070720/1184928455

e-hon のサイトの応答を見ると、

Content-Type:text/html; charset=Windows-31J

になってますし、応答の !DOCTYPE の前に、延々と空白行が出力されていることから、Webサーバは unix系で、jsp を使ってるっぽいことが想像できます。

ただ、上記のは Webサーバサイドの対応の仕方で、今回のケースでは使えません(ぼくがはまったときは、サーバサイドで解決しました)。


文字コードの扱いでエラーになってて、実は、通信は成功しています。
変数のウォッチで、変数 http を見てみると、responseText はダメですけど、responseBody プロパティが利用できそうなのが分かると思います。

質問のコードで、responseText を使うところを書き換えてみました。

URL = "http://www.e-hon.ne.jp/bec/SA/Detail?refShinCode=0100000000000033099016&Action_id=121&Sza_id=C0"
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", URL, False
http.Send

' ★ .responseText を使おうとすると、変換エラーが出る
'HTML = http.responseText

' ★ 通信には成功してて、.responseBody (バイナリ) は利用できたりする
HTML = StrConv(http.responseBody, vbUnicode)

' ★ 例えば、ページのタイトルを切り出してみる
i1 = InStr(1, HTML, "<title>")
i2 = InStr(1, HTML, "</title>")
Range("A1").Value = Mid(HTML, i1 + 7, i2 - i1 - 7)
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ