NT$
0
貨幣 : NT$

AccessのVBAでYahoo!路線情報からHTMLを取得して運賃を取得してみる

May 4, 2022
今回はAccessのフォームで Yahoo!路線情報から運賃を取得する ところまでを実践してみましょう。 このケースでは インターネットエクスプローラーオブジェクト を利用してHTMLを取得する方法を説明します。 尚、今回はVBAの知識だけでは無く、HTMLに関する最低限の知識も必要になります。その為、少し長い記事になりますがご了承ください。 出発と到着を指定して検索ボタンをクリックするとYahoo!路線情報を検索します。その後、結果ページのHTMLを取得して区間と運賃をフォームに表示します。 動作イメージは以下の通りです。 ※今回はWebページを表示せず結果のみ取得します。 ※今回取得する結果は最初の3経路までとします。 '****************************************** 'HTMLを取得する '****************************************** Private Sub cmd検索_Click Dim s出発 As String Dim s到着 As String Dim w_URL As String Dim objIE As Object Dim strHtml As Variant Dim strSearch As Variant Dim wPosition As Long Dim wLen As Long Dim wStartPoint As Long Dim wEndPoint As Long Dim i As Integer '入力漏れがある場合は処理しない。 yahoo 路線情報 api If Nz = "" Or _ Nz = "" Then Exit Sub '文字コードをUTF-8に変換 s出発 = UrlEncodeUtf8 s到着 = UrlEncodeUtf8 'Yahoo!運賃検索URLを作成する w_URL = "sit.crazy.run engines like google.co.jp/run/side?from=" _ & s出発 & "&to=" & s到着 'objIEオブジェクトを作成します Set objIE = CreateObject 'インターネットエクスプローラは非表示にする objIE.Visible = False '指定したURLをセットします objIE.Navigate w_URL 'ページの読み込みが終わるまで待機する Do Until objIE.Busy = False '一旦処理を待機する Sleep 200 Loop 'BodyのHTMLを取得する strHtml = objIE.Document.Body.InnerHtml '区間を取得する '最初の をセット strSearch = " " '文字数を取得 wLen = Len '区間の開始位置を取得 wStartPoint = InStr wLen '区間の終わりのタグ をセット strSearch = " " '区間の終了位置を取得 wEndPoint = InStr '区間をテキストボックスにセットする Me!txbKukan = Mid 'クリアする wEndPoint = 1 Me!txbRoot = Null '検索結果1ページ目の運賃を取得する For i = 1 To 3 'マークのタグ をセット strSearch = " " wLen = Len wStartPoint = InStr wLen 'マーク料金を取得する If InStr " wEndPoint = InStr If Nz " wLen = Len wStartPoint = InStr wLen If InStr " wEndPoint = InStr If Nz 尚、運賃検索用のURLの作成に関する情報は前回のエントリーをご参考下さい。 Option Compare Database Declare Sub Sleep Lib "kernel32" VBAのポイント解説 IEオブジェクトを使う準備をします サンプルコード30行目でIEオブジェクトを作成しています。 検索用URLをセットします 36行目でIEオブジェクトに Navigateプロパティ を使い検索用URLをセットします。 ページの読み込みが終わるまで待機する 39行目から42行目までIEが検索結果を取得するまで処理を待機します。 BodyのHTMLを取得する 45行目で検索結果ページのBody部のHTMLを Document.Body.InnerHtml を利用して取得します。 区間をソースコードから抽出する 47行目から60行目までで区間のテキストを取得しています。区間はHTMLのソースコードを見ると最初の h2タグ と processタグ に囲まれている事が分かります。 サンプルソースではこのタグの位置を InStr関数 を使って取得し、 Mid関数 で区間を抜き取っています。 快艇衝浪費用 運賃をソースコードから抽出する 67行目以降で最初の検索結果ページの3経路の運賃を取得していますが、運賃の表示で最安値の場合とそうでない場合、使われているprocessタグのクラスが異なりますので、それぞれ参照するようにしなければいけません。 区間同様に運賃の位置を InStr関数 を使って取得し、 Mid関数 で抜き取ります。 以上、今回はIEオブジェクトを使ってHTMLを取得する方法について説明しました。 サンプルソースではYahoo!路線情報からHTMLソースを取得しましたが、Yahoo!側のサイト改変などにより内部構造が変わった場合は正常に動作しなくなる可能性も高いです。 そのような場合は、VBAも修正する必要がありますのでご了承ください。 HTMLソースを取得するならXMLHTTPオブジェクトを使う方法がおすすめ! IEオブジェクトを使わずにXMLHTTPオブジェクトを使ってYahoo!路線情報のHTMLソースを取得する方法について説明しています。 Copyright © Excel・Accessで楽々シゴト!INFITH VBA Lab All Rights Reserved.

<< 《其他股》潤泰新兩大案上膛 彌補俄債損失

>> 慈濟菲國辦器官移植論壇 醫療新南向交流

0