2015年5月17日日曜日

[Script][VBS]Webからデータを取って来てファイルに保存するスクリプトサンプル

Webに書かれているデータを取って来て、ファイルに保存するサンプルを作りました。

【English Menu】のページ
http://maruton-memorandum.blogspot.jp/p/english-menu.html

ここのリンクを取得し、リンク先のリストされたデータを取って来てファイル保存します。

出力データイメージ

【スクリプト作成のポイント】
HTMLページを取得するのですが、IE オブジェクトにページを読み込ませます。

IE オブジェクトは取りこんだ HTML ページのタグを解析でき、指定したタグで囲まれたデータを取得することができます。
今回は"li" タグのデータを取って処理しています。

VBスクリプトで IE オブジェクトを起動すると iexplore.exe プロセスが立ちあがるのですが、プロセスをあげっぱなしでスクリプトは終わってしまうので、最後プロセス終了処理をしています。
IE を全て落としているので、別ウインドウで上げていたものまで消してしまいます。

【スクリプト】
Webからデータを取って来てファイルに保存するサンプル
On Error Resume Next

'------------------------------------
' maruton's memorandom トップのページ
'------------------------------------
strTopURL = "http://maruton-memorandum.blogspot.jp/p/english-menu.html"

'------------------------------------
'ログファイル
'------------------------------------
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFSO.CreateTextFile(objFSO.GetParentFolderName( WScript.ScriptFullName ) & "\Log.txt")


'------------------------------------
'プロセス処理
'------------------------------------
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")


'------------------------------------
'IEオブジェクト
'------------------------------------
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False

'指定したURLを表示
objIE.Navigate strTopURL

'ページの読み込みが終わるまでループ
Do Until objIE.Busy = False
   '200ミリ秒
   WScript.sleep(200)
Loop

'------------------------------------
' トップページのデータ取得ループ
'------------------------------------
i = 10
Do While 1
   Err.Clear
   '---------------------------------
   ' リストのデータを処理する
   '---------------------------------
   strTopLIData = objIE.document.All.tags("li")(i).innerHTML
   If Err.Number <> 0 Then
      Exit Do
   End If

   'objLogFile.WriteLine strLIData
   '---------------------------------
   ' URL と タイトルを取得
   '---------------------------------
   intStart = 0
   intEnd = 0
   intStart = InStr(1, strTopLIData, """", 1)
   intEnd = InStr(10,strTopLIData, """", 1)

   strURL = ""
   strTitle = ""
   If intStart <> 0 And intEnd <> 0 Then
       strURL = Mid(strTopLIData, intstart + 1, intEnd - intStart - 1)
       strTitle = Mid(strTopLIData, intEnd + 2 , Len(strTopLIData) - intEnd - 5)
'       objLogFile.WriteLine strURL & "," & strTitle
   End If

   '---------------------------------
   ' URL の先へデータを取りに行く
   '---------------------------------
   If strURL <> "" Then

     '------------------------------------
     'IEオブジェクト
     '------------------------------------
     Set objIE2 = CreateObject("InternetExplorer.Application")
     objIE2.Visible = False

     '指定したURLを表示
     objIE2.Navigate strURL

     'ページの読み込みが終わるまでループ
     Do Until objIE2.Busy = False
        '200ミリ秒
        WScript.sleep(200)
     Loop

     '------------------------------------
     ' ページのデータ取得ループ
     '------------------------------------
     j = 10
     Do While 1
        '---------------------------------
        ' リストのデータを処理する
        ' 初回のため Text 取得
        '---------------------------------
        Err.Clear
        strLIData = objIE2.document.All.tags("li")(j).innerText
        If Err.Number <> 0 Then
           Exit Do
        End If

        '---------------------------------
        ' リストを処理する
        '---------------------------------
        '①( )の中が日本語
        intJMenuPosS = Instr(1, strLIData, "(", 1)
        intJMenuPosE = Instr(1, strLIData, ")", 1)
        strJMenu = Mid(strLIData, intJMenuPosS + 1, intJMenuposE - intJMenuPosS - 1)

        '②(より左が英語
        strEMenu = Trim(Left(strLIData, intJMenuPosS - 1))

        '③英語にリンクがあるか見て解体
        '今はしない
     
'       objLogFile.WriteLine strTitle & "," & strEMenu & "," & strJMenu
        objLogFile.WriteLine strTitle & vbTab & strEMenu & "," & strJMenu
        j = j + 1

     
     Loop

     Set objIE2 = Nothing

   End If
   i = i + 1
Loop

objLogFile.Close
Set objIE = Nothing

'------------------------------------
' プロセス終了処理
' 全ての IE プロセスを終了する
'------------------------------------
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process Where Name=""iexplore.exe""")

For Each objProcess in colProcesses
  objProcess.Terminate
Next


msgbox "終了しました"

WScript.Quit

日記の一覧に戻る

0 件のコメント:

コメントを投稿