EXCEL VBA Google Chrome(グーグルクローム)の操作・住所から最寄り駅を検索・webスクレイピング(自動収集・テクニック)
EXCEL VBA Google Chrome(グーグルクローム)の操作・住所から最寄り駅検索・webスクレイピング(自動収集・テクニック)
今回説明するプログラムは、GoogleChromeとVBAを組み合わせたサンプルプログラムになります。以前、InternetExplorerでの住所からの最寄り駅を検索する方法を説明いたしましたが、今回は、GoogleChromeでの住所データからWeb検索で最寄り駅を検索する方法を説明いたします。インターネットの地図サイト(Yahoo!地図)を利用して、住所情報を入力して検索結果を元に最寄り駅情報を入手します。調べる情報の件数が1~3件程度なら、自分自身で手入力で調べれば良いと思いますが、それが100件を超える場合、時間も掛かりますし手間も掛かります。社内の人事情報等で、個人の住所から該当する最寄り駅を探す場合などに、便利だと思います。それでは、順番に説明いたします。
●注意:下記の各プログラムを実行するには、SeleniumBasic事前設定が必要になります。下記を参照して下さい。
EXCEL VBA Google Chrome(グーグルクローム)の操作・webスクレイピング・情報取得(Seleniumの設定・準備)
●【EXCEL VBAとInternetExplorerの組み合わせで情報を取得する際は、下記を参照して下さい】
GoogleChromeスクレピング 住所データから最寄り駅(近隣の駅)検索を行う(1件分:取得)
下記のプログラムは、GoogleChromeとVBAを組み合わせて、住所データから最寄り駅を検索するサンプルプログラムです。EXCELシートに住所の一覧を作成して、その住所データを元に、WebサイトのYahoo!地図を利用して最寄り駅検索を行い、最寄り駅の1ヶ所分(一番近い駅)のデータをEXCELシートに転記します。
【プログラム内容】
①【住所の一覧データから最寄り駅を検索します】(1駅)一番近い駅
②Webサイト【Yahoo!地図】から最寄り駅を検索します。
【プログラムの流れ】
① B列「都道府県庁」の最終行を取得します。
② GoogleChromeを立ち上げます。(起動)
③ Yahoo!地図のWebを開きます。
④ C列「住所」データをYahooM地図!Webページの検索欄に登録します。
⑤ Yahoo!地図「検索」ボタンをクリックして検索を行います。
⑥ Yahoo!地図の検索結果により、近隣の駅の情報を取得します。
⑦ 近隣の駅の取得結果をD列に代入します。
⑧ B列の最終行分まで繰り返します。④へ戻る
【プログラム実行条件】
① SeleniumBasic事前設定をサイト(https://akira55.com/seleniumbasic_googlechrome/)より行って下さい。
② VBEの参照設定を行う【VBEの画面より】【ツール】⇒【参照設定】を選択して【Selenium Type Library】にチェックを入れます。
【注意】
なお、Webスクレイビングを利用する際は、問い合わせ先のWebサーバーに負荷がかかりますので、連続利用はお控え下さい。
Webスクレピングは、データ収集先のホームページに変更・修正等があった場合は、その都度プルグラムの修正が必要になします。
※下記のプログラムは、2021年3月時点でのプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
'******** AKIRA55.COM ******* ' 'VBEの参照設定を行う【VBEの画面より】【ツール】⇒【参照設定】を選択して【Selenium Type Library】にチェックを入れます。 ' Sub transportation_expenses01() 'Yahoo!JAPAN!路線情報(乗り換え案内) 1件表示 Dim Driver As New Selenium.WebDriver Dim Webtxt As String Dim I, lRow As Long lRow = Cells(Rows.Count, "B").End(xlUp).Row 'B列の最終行を取得します。 With Driver .Start "chrome" For I = 3 To lRow 'B列に登録されている最終行まで繰り返します。 On Error Resume Next .Get "https://map.yahoo.co.jp/" 'Yahoo!Map!を開きます .Wait 2000 .FindElementByCss("#search_box_keyword > form > div > div > input").SendKeys Cells(I, "C") 'C列のセルから出発駅を入力します。 .FindElementByCss("#search_box_keyword > form > div > button").Click '検索をクリック .Wait 2000 'ページの表示待ち If I = 3 Then .FindElementByCss("#search_box_keyword > form > div > div > input").SendKeys Cells(I, "C") 'C列のセルから出発駅を入力します。 .FindElementByCss("#search_box_keyword > form > div > button").Click '検索をクリック .Wait 2000 'ページの表示待ち End If Webtxt = .FindElementByCss("#poi > div.POI__content > div.POI__contentBody > div.Keyvalue > ul > li.Keyvalue__listItem.Keyvalue__listItem--nearestStations > span:nth-child(2) > span:nth-child(1)").Text '検索結果より、運賃を取得します。 Cells(I, "D") = Webtxt '運賃の取得結果をE列に代入します。 On Error GoTo 0 Next I '全てのデータが終わるまで繰り返します。 .Close End With Set Driver = Nothing End Sub ' |
GoogleChromeスクレピング 住所データから最寄り駅(近隣の駅)検索を行う(3件分:取得)
下記のプログラムは、上記サンプルプログラム①の応用になります。GoogleChromeとVBAを組み合わせて、住所データから最寄り駅を検索するサンプルプログラムですが、今回は、EXCELシートの住所の一覧を元に、WebサイトのYahoo!地図を利用して最寄り駅検索を行い、最寄り駅の3か所(駅)データをEXCELシートに転記します。
【プログラム内容】
①【住所の一覧データから最寄り駅を検索します】(3駅)
※青枠の住所で検索します。
※赤枠に「近隣の駅」3駅が表示されます。今回は、この3駅分のデータをEXCELに転記します。
②【C列の住所データを元に検索します。】
③ 【D列・E列・F列に最寄り駅(近隣の駅)の情報が転記されます。】
【プログラムの流れ】
① B列「都道府県庁」の最終行を取得します。
② GoogleChromeを立ち上げます。(起動)
③ Yahoo!地図のWebを開きます。
④ C列「住所」データをYahooM地図!Webページの検索欄に登録します。
⑤ Yahoo!地図「検索」ボタンをクリックして検索を行います。
⑥ Yahoo!地図の検索結果により、近隣の駅の情報を取得します。
⑦ 近隣の駅の取得結果をD列に一番近い駅・E列に2番目に近い駅・F列に3番目に近い駅を代入します。
⑧ B列の最終行分まで繰り返します。④へ戻る
【プログラム実行条件】
① SeleniumBasic事前設定をサイト(https://akira55.com/seleniumbasic_googlechrome/)より行って下さい。
② VBEの参照設定を行う【VBEの画面より】【ツール】⇒【参照設定】を選択して【Selenium Type Library】にチェックを入れます。
【注意】
なお、Webスクレイビングを利用する際は、問い合わせ先のWebサーバーに負荷がかかりますので、連続利用はお控え下さい。
Webスクレピングは、データ収集先のホームページに変更・修正等があった場合は、その都度プログラムの修正が必要になりますので、ご了承ください。
※下記のプログラムは、2021年3月時点でのプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
' 'VBEの参照設定を行う【VBEの画面より】【ツール】⇒【参照設定】を選択して【Selenium Type Library】にチェックを入れます。 ' Sub transportation_expenses03() 'Yahoo!JAPAN!路線情報(乗り換え案内) 3件表示 ループ Dim Driver As New Selenium.WebDriver Dim Webtxt As String Dim I, L, lRow As Long lRow = Cells(Rows.Count, "B").End(xlUp).Row 'B列の最終行を取得します。 With Driver .Start "chrome" For I = 3 To lRow 'B列に登録されている最終行まで繰り返します。 On Error Resume Next .Get "https://map.yahoo.co.jp/" 'Yahoo!Map!を開きます .Wait 5000 .FindElementByCss("#search_box_keyword > form > div > div > input").SendKeys Cells(I, "C") 'C列のセルから出発駅を入力します。 .FindElementByCss("#search_box_keyword > form > div > button").Click '検索をクリック .Wait 2000 'ページの表示待ち For L = 1 To 3 ' Webページから最寄り駅検索を1~3件を行います。 Webtxt = .FindElementByCss("#poi > div.POI__content > div.POI__contentBody > div.Keyvalue > ul > li.Keyvalue__listItem.Keyvalue__listItem--nearestStations > span:nth-child(2) > span:nth-child(" & L & ")").Text '検索結果より、運賃を取得します。 Cells(I, 3 + L) = Webtxt '運賃の取得結果をE列に代入します。 Next L On Error GoTo 0 Next I '全てのデータが終わるまで繰り返します。 .Close End With Set Driver = Nothing End Sub ' |
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。