解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

VBScript による Web スクレイピング




こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。



この記事の目次




背景


今日は以前の記事に関わる事務作業の自動化の準備です。

ブラウザシステムや Web をスクレイピングしたいときは結構あります。

一度作ったプログラムをうまく管理して、資産的に使用して行くことが今後の自動化の生産性を上げることにもつながります。

そこで、フォルダ構成や作成するプログラムの構成を考えていきます。


目的


個人的にはWebスクレイピングPython で実装するのが主流な気がしますが、VBS で実装します。(笑)

自動化をして行く上で、都合の良い便利なプログラムの組み方を考えます。まぁ、基本通りです。ダラダラと書かずに関数もしくはサブルーチンを作成し、なるべくプログラムは関数、サブルーチンのみで構成する方針でいきます。

まず、VBScript をしまうためのフォルダ構成を作成します。 何でもいいので1つフォルダを作成します。私は『VBS』というフォルダを作成しています。 そして、関数、サブルーチンをしまうためにVBSフォルダの中に『myFunc』というフォルダを作成しました。

使えそうな関数のアイデアが浮かんだら、『myFunc』フォルダに関数の VBScript を保存しています。

まず、 VBScriptIE を新規に作成する関数を作成し、『myFunc』フォルダに保存します。
そして、外部から IE を新規に作成する関数を読み込んで IE で Web を表示させてみます。




関数

ソースコード

この関数は URL を引数で渡して、新規 IE で URL を表示するサブルーチンです。

newIE-targetURL.vbs

Sub newIE(targetURL)
   '--------------------------------------------------------------------
   ' IE オブジェクトの生成
   '--------------------------------------------------------------------
   Set objIE = CreateObject("InternetExplorer.Application")
   '--------------------------------------------------------------------
   ' IE オブジェクトの可視化
   '--------------------------------------------------------------------
   objIE.Visible = True
   '--------------------------------------------------------------------
   ' IEを開く
   '--------------------------------------------------------------------
   objIE.navigate targetURL
   '--------------------------------------------------------------------
   ' ページが読み込まれるまで待つ
   '--------------------------------------------------------------------
   Do While objIE.Busy = True Or objIE.readyState <> 4
      WScript.Sleep 100
   Loop
   Set objIE = Nothing
End Sub

使い方

作成したnewIE-targetURL.vbs ファイルを呼び出して使うプログラムを書きます。

main.vbs

'------------------------------------------------------------------------------
' 自作関数のインクルード
'------------------------------------------------------------------------------
call IncludeFunction()
 
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' IE を開く
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
   '--- 変数宣言 ---
   targetURL = "https://transit.yahoo.co.jp/"
   '--- 実行 ---
   call newIE(targetURL)
 
'------------------------------------------------------------------------------
' 終了通知
'------------------------------------------------------------------------------
MsgBox wscript.scriptname & " の処理が完了しました。"
'------------------------------------------------------------------------------
' 自作関数をコールするサブルーチン
'------------------------------------------------------------------------------
sub IncludeFunction()
   '----------------------------------------------------------------------------
   ' 自分(=VBSファイル)のディレクトリを取得する
   '----------------------------------------------------------------------------
   FullPath = wscript.scriptfullname
   FileName = wscript.scriptname
   pathLen= len(FullPath) - len(FileName)
   crrDir = left(FullPath, pathLen)
   chiDir = "myFunc"
   crrDir = crrDir & chiDir
   '----------------------------------------------------------------------------
   ' ファイルシステムを扱うオブジェクトを作成
   '----------------------------------------------------------------------------
   Set objFileSys = CreateObject("Scripting.FileSystemObject")
   '----------------------------------------------------------------------------
   ' フォルダのオブジェクトを取得
   '----------------------------------------------------------------------------
   Set objFolder = objFileSys.GetFolder(crrDir)
   '----------------------------------------------------------------------------
   ' FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
   '----------------------------------------------------------------------------
   For Each objFile In objFolder.Files
      '--------------------------------------------------------------------------
      ' 自作関数のコール
      '--------------------------------------------------------------------------
      FuncFile = objFile.Name
      Set objFile = objFileSys.OpenTextFile(crrDir & "\" & FuncFile)
      ExecuteGlobal objFile.ReadAll()
      objFile.Close
   Next
   '----------------------------------------------------------------------------
   ' メモリ解放
   '----------------------------------------------------------------------------
   Set objFile = Nothing
   Set objFolder = Nothing
   Set objFileSys = Nothing
end sub



コメント

これで、 main.vbs を起動すると Yahoo! の路線情報の検索ページが新しい IE で開きます。

さらに、 IncludeFunction というサブルーチンで外部の VBScript ファイルの関数やサブルーチンを使用可能な状態にしています。

これからは、newIE-targetURL.vbs の様な色々な機能の関数、サブルーチンを作って、『myFunc』フォルダの保存していきます。




以上