見出し画像

施設の予約空き状況の自動検出スクレイピング(Python)

こんにちは。

今回の記事はPythonを使った施設の予約状況をスクレイピングして、空きがある場合にLINEで通知してくれるシステム制作について書きます。

作ろうと思ったきっかけは人気キャンプ場やテニスコートなどの施設の予約がなかなか取れず、定期的に検索して予約を確認するには限界があると思ったからです。
現在は、ゆるキャン△で一躍有名になったふもとっぱらキャンプ場や東京都が運営する公園施設の予約状況を自動検出しています。キャンセルが出た後の予約が先着順の施設はスクレイピングした者勝ちの世の中です…

ということで、東京都が運営するテニスコート(野球場などもほぼ同じ方法でできる)の予約空き検出スクリプトに焦点を当てて解説していきます。


1. 準備

環境としてはMac M2でPython3.11を使用します。
必要なライブラリは以下の通りです。

  • selenium

  • webdriver-manager

  • chromedriver-binary

  • requests

全て最新版(2023/8月時点)にしておきましょう。

2. 実装

では本題の実装の方を見ていきます。
全体の流れとしては

  1. 必要なモジュールのimport

  2. chromedriverのGet(インスタンス化)

  3. Xpath指定で空き状況を走査して通知用の配列に詰める

  4. 配列をLINE通知のAPIに渡す

以上の流れを10分に1回などのペースで実行するようにwhile文を使って実装していきます。

2-1. 必要なモジュールのimport

下記が必要なライブラリです。実装の過程で不要になっているライブラリもあるかもしれませんが、以下があれば一旦大丈夫です。

import chromedriver_binary
import requests
import urllib.request
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.support.select import Select
from webdriver_manager.chrome import ChromeDriverManager


2-2. chromedriverのGet(インスタンス化)

chromeの自動アップデートとインスタンスの起動は以下のコードで実行します。

options = Options()
options.add_argument('--headless') #browser操作を確認しない場合
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)

これでdriverインスタンスを確保できたので

 driver.get(“URL”)

で読み込みたいページを読み込みます。

この方法で各予約ページを読み込む方法もありますが、毎回Getしてインスタンス生成するのは手間なのでページ内のボタンをクリックして同一インスタンスから各ページに繋げる方法を取ります。

ここから先は

1,451字 / 2画像

¥ 500

この記事が気に入ったらサポートをしてみませんか?