【VBA】HTTP通信でWEBスクレイピング7~HTTP通信で画像やファイルを保存する~

HTTP通信で画像やファイルを保存する

連休が暇なのでブログを更新するJimです。どうも✋

 

連休なんて、やることねぇし!いらねぇし!休みたければ有給取るし!

まあ、いいや。

今回はオマケ回の『HTTP通信で画像やファイルを保存する』です。

『HTTP通信でWEBスクレイピング』の1~7はテキストデータを『responseText』で処理してきました。

じゃあ、ファイル類を取得する時はどうするんだい?ってことなんだけど。

少し扱い方が違うくて。

ファイル類はバイナリデータとして送られてくるから『responseBody』で受け取ってストリームで保存するんだ。

要は『0と1のデータを、入ってきた順番のまま流して保存する』ってことね。

例えば、HTTPスクレイピング中に『responseText』で取得したHTMLの中にファイルの場所が埋め込んであったとしたら、そのファイルをフルパスで指定してやればよい。

下記ソースはサーバーにある『text.csv』をダウンロードフォルダに格納するもの。(ダウンロードフォルダにtest_yyyyMMddhhmmss.csvで保存されるので上書きには気を付けてね)

Private Const url As String = "https://bw-rocket.com/http_scraping"

Public Sub saveFile()

 Dim http As Object
 Dim stream As Object

 Set http = CreateObject("MSXML2.XMLHTTP")
 http.Open "GET", url & "/test.csv", False
 http.Send

 If http.Status = 200 Then
  Set stream = CreateObject("ADODB.Stream")
  With stream
   .Type = 1 'バイナリ
   .Open
   .Write http.responseBody
   .SaveToFile downloadPath & "\test_" & Format(Now, "yyyyMMddhhmmss") & ".csv", 2 '2:上書き保存
   .Close
  End With

 End If

 Set stream = Nothing
 Set http = Nothing

End Sub

'ダウンロードフォルダ
Private Function downloadPath()

  downloadPath = Environ("USERPROFILE") & "\Downloads"

End Function

csvファイル以外にも画像やPDFも同じように処理すればよい。

 

 

はい。ってことで『HTTP通信で画像やファイルを保存する』でした。

これで『HTTP通信でWEBスクレイピング』は終わりです。

また何かあれば更新するかもしれないけど。もう無いかな。

したら、またね✋