WebサイトからデータをExcelに取得する方法③

みなさん、こんちには!

前回の文字化けを解決して行きましょう。
今回は、ADODB.Stream を使った文字コードの変換をしてみます。

「ADODB.Streamオブジェクト」を CreateObject関数で生成する。

Dim Strm As Object
Set Strm = CreateObject(“ADODB.Stream”)

準備が整いましたので、変換してみましょう。

With Strm
    .Open
    .Position = 0
    .Type = 1 'adTypeBinary
    .Write web_con.responseBody
    
    .Position = 0
    .Type = 2 'adTypeText
    .Charset = "EUC-JP"
    HTML_str = .ReadText
    .Close
End With

前回の web_con.responseText から web_con.responseBody に変わっているのに、気付かれたと思います。返り値が違うのです。

responseText は、返り値はテキスト
responseBody は、返り値はバイナリ

ADODB.Stream を順を追ってコメントしていきます。
.Open  ADODB.Stream を開きます。
.Position = 0 カーソルを一番最初に移動する。
.Type = 1 バイナリモードに設定する。
.Write web_con.responseBody バイナリデータを書き込み
.Position = 0 カーソルを一番最初に移動する。
.Type = 2 テキストモードに設定する。
.Charset = “EUC-JP” 文字コードEUC-JP に設定する。
HTML_str = .ReadText  EUC-JP で訳したテキストを読み出す。
.Close  ADODB.Stream を閉じる。

今回出来上がったコードを表示します。

Dim HTML_str As String
Dim web_con As Object
Dim Strm As Object
Set web_con = CreateObject("MSXML2.XMLHTTP")
Set Strm = CreateObject("ADODB.Stream")
 
web_con.Open "GET", "https://www.rakuten.co.jp/",False
web_con.Send
 
Do While web_con.readyState < 4
DoEvents
Sleep 1
Loop
 
With Strm
    .Open
    .Position = 0
    .Type = 1 'adTypeBinary
    .Write web_con.responseBody
    
    .Position = 0
    .Type = 2 'adTypeText
    .Charset = "EUC-JP"
    HTML_str = .ReadText
    .Close
End With
 
Debug.Print HTML_str
次回は、今回のコードを使って https://www.rakuten.co.jp/ から必要なデータを取得して見たいと思います。