Yahooの検索件数をVBAで抽出したい
未読分:2件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#2 2014年10月8日(水)20時26分 From: 管理人 | 返事 削除 変更 |
Yahoo検索のHTMLソースを見ると検索数の部分は以下のようになっています。 <p class="resultNum">約<span class="bo">629,000</span>件</p> pタグで括られているのが分かりますね。こちらのclassで設定されている「resultNum」を見ると他では利用されていない一意のキーワードでしたのでこちらを分岐処理の対象としてみました。 以下がVBAで抽出するプログラムになりますので、ご確認ください。 Sub sample() Dim objIE As InternetExplorer Dim objTag As Object 'YahooをIEで開く Call ieView(objIE, "http://www.yahoo.co.jp/") '「VBA IE」で検索 Call formText(objIE, "p", "VBA IE") Call tagClick(objIE, "input", "検索") Debug.Print tagValue(objIE, "p", "resultNum", "innerText") End Sub Sub ieView(objIE As InternetExplorer, _ urlName As String, _ Optional viewFlg As Boolean = True, _ Optional ieTop As Integer = 0, _ Optional ieLeft As Integer = 0, _ Optional ieWidth As Integer = 1200, _ Optional ieHeight As Integer = 1000) Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = viewFlg objIE.Top = ieTop objIE.Left = ieLeft objIE.Width = ieWidth objIE.Height = ieHeight objIE.navigate urlName Call ieCheck(objIE) End Sub Sub ieCheck(objIE As InternetExplorer) Dim timeout As Date timeout = Now + TimeSerial(0, 0, 10) Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Sleep 100 If Now > timeout Then objIE.Refresh timeout = Now + TimeSerial(0, 0, 10) End If Loop timeout = Now + TimeSerial(0, 0, 10) Do Until objIE.document.readyState = "complete" DoEvents Sleep 100 If Now > timeout Then objIE.Refresh timeout = Now + TimeSerial(0, 0, 10) End If Loop End Sub Sub formText(objIE As InternetExplorer, idName As String, tagValue As String) For Each objTag In objIE.document.getElementsByTagName("input") If objTag.Name = idName Then objTag.Value = tagValue Exit For End If Next For Each objTag In objIE.document.getElementsByTagName("textarea") If objTag.Name = idName Then objTag.Value = tagValue Exit For End If Next End Sub Sub tagClick(objIE As InternetExplorer, tag As String, tagStr As String) For Each objTag In objIE.document.getElementsByTagName(tag) If InStr(objTag.outerHTML, tagStr) > 0 Then objTag.Click Call ieCheck(objIE) Exit For End If Next End Sub Function tagValue(objIE As InternetExplorer, _ tagName As String, _ tagStr As String, _ valueType As String) As String For Each objTag In objIE.document.getElementsByTagName(tagName) With objTag If InStr(.outerHTML, tagStr) > 0 Then Select Case valueType Case "innerHTML" tagValue = .innerHTML Case "innerText" tagValue = .innerText Case "outerHTML" tagValue = .outerHTML Case "outerText" tagValue = .outerText End Select Exit For End If End With Next End Function |
Message#1 2014年10月8日(水)10時02分 From: gorli18 | 返事 削除 変更 |
Yahoo検索であるキーワードを入力し、検索ボタンを自動クリックします。 そして、検索結果の上位に表示されている件数だけを抽出したいのですが、このような動作をVBAで行うことは可能でしょうか? もし可能であれば、どのようにプログラムを組めばよいか教えてください。 よろしくお願いします。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降