【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スクレイピング』は終わりです。
また何かあれば更新するかもしれないけど。もう無いかな。
したら、またね✋



ディスカッション
コメント一覧
まだ、コメントがありません