【PowerShell】会議室.COMの施設名と住所を検索して取得する
PowerShellで会議室.COMの施設名と住所を検索して取得するスクリプトです。
同時期に作ったスタバの店舗情報取得スクリプトは2020年12月時点で使えなくなっていましたが、こちらは使えました。
処理内容
①検索の実行
②検索結果の表示
③表示された情報から施設名と住所を取得
④取得した情報を外部ファイルへ出力
②検索結果の表示
③表示された情報から施設名と住所を取得
④取得した情報を外部ファイルへ出力
会議室.COMの施設検索機能
会議室.COM(https://www.kaigishitu.com/)では全国の会議室情報が検索できます。
トップページから条件なしでも検索でき、その場合は全施設が対象になります。
検索結果の一部が表示され、「さらに表示」ボタンを押下する度に追加で情報が表示されます。


PowerShellによるWebスクレイピングツールの作成
施設名と住所を取得するPowerShellのコードです。
ブラウザ(Internet Explorer)から全施設を対象に検索し、情報の取得と出力を繰り返します。
環境に合わせて以下を修正してください。
- 11行目の出力ファイルパス
- ブラウザの動作を確認したい場合は26行目をコメントイン
# ---------------------------------------------------------------------- # 会議室.COMのWebサイトから会議室名と住所を抽出してテキストで出力する # ---------------------------------------------------------------------- # -------------------------------------------------- # スクリプトの初期処理 # -------------------------------------------------- Add-Type -AssemblyName System.Windows.Forms # 出力ファイルパスを設定する $fileName = "D:\roomlist.txt" # 出力ファイルを初期化する Write-Output "" > $fileName # URLを設定する $url = "https://www.kaigishitu.com/" # -------------------------------------------------- # IEの初期処理 # -------------------------------------------------- # 初期設定URLへ移動する $ie = New-Object -ComObject InternetExplorer.Application # 画面の動きを確認したい場合は下記をコメントインする # $ie.Visible = $true $ie.Navigate($url) # ページが切り替わるまで待つ while($ie.Busy) { Start-Sleep -seconds 1 } # ドキュメントオブジェクトを取得する $doc = $ie.document # -------------------------------------------------- # 全件検索処理 # -------------------------------------------------- $doc.getElementById("submit_btn").click() while($ie.Busy) { Start-Sleep -seconds 1 } # -------------------------------------------------- # データ取得処理 # -------------------------------------------------- # 以下は検索結果ページに「さらに表示」ボタンがある前提で設計している # 情報を取得後、「さらに表示」ボタンがある場合クリックして情報を取得し続ける $btnHeight = $doc.getElementsByClassName("listMore_btn btn-blue buildingMore")[0].offsetHeight $i = 0 while($btnHeight -ne 0) { # 「さらに表示」ボタンの存在チェック $btnHeight = $doc.getElementsByClassName("listMore_btn btn-blue buildingMore")[0].offsetHeight # 検索結果件数の格納 10件ずつの想定 $resultCnt = $doc.getElementsByClassName("c-topics__heading p-buildinglist__heading").length -1 while($i -le $resultCnt) { # 会議室名を格納する $room = $doc.getElementsByClassName("c-topics__heading p-buildinglist__heading")[$i].outerText # 住所から余分な文字を除去して格納する $text = $doc.getElementsByClassName("p-buildinglist__access")[$i].outerText $address = $text.replace("地図を見る","") # 出力文字列から改行を除去しておく $tmp = $room + "`t" + $address.replace("`r`n","") Write-Output $tmp >> $fileName $i += 1 # 「さらに表示」ボタン(配列)があったら押す $doc.getElementsByClassName("listMore_btn btn-blue buildingMore")[0].click() while($ie.Busy) { Start-Sleep -seconds 3 } } } [System.Windows.Forms.Messagebox]::Show("処理が完了しました","完了")
実行結果
実行すると、施設名と住所をタブ区切りのテキストファイルに出力します。

参考書
PowerShellの開発にずっと使っている参考書で、深く勉強したい人にもおすすめできます。
ページ数が多いため紙の本の方が使いやすいです。
リンク
最近のコメント