【PowerShell】会議室.COMの施設名と住所を検索して取得する

CODE,PowerShell

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の開発にずっと使っている参考書で、深く勉強したい人にもおすすめできます。
ページ数が多いため紙の本の方が使いやすいです。