Python スクリプト(GAS or launchd)で目黒駅周辺の全店舗データを自動取得
店名、住所、営業時間、評価、保存数 etc. を CSV ファイルで保存
価格帯別の店舗数、営業時間の分布、ジャンル別評価平均 等を計算
マスターデータ(テーブル1)とサマリ(テーブル2)を自動連携
Airtable の Grid / Gallery / Chart で可視化・コンサル資料化
目標:
毎週月曜朝 9:00 に、目黒駅周辺の食べログ全店舗(627 件)をクロール
実装方法(2択):
| 方法 | メリット | デメリット |
|---|---|---|
| Python + launchd | ローカルで完全制御可能 | マシン起動依存 |
| Google Apps Script | クラウド自動実行、トリガー設定簡単 | GAS の API 制限(実行時間 6 分) |
推奨:GAS + Clasp(ローカル開発) → cloud.google.com で自動スケジュール
クロール対象 URL:
取得項目(18項目 + 補足5項目):
★ 一覧ページ取得: 店名・最寄り駅・ジャンル・価格帯・評価点・口コミ数・保存数(#1〜#10)
★ 詳細ページ取得: 住所・電話番号・営業時間・定休日・席数・個室・喫煙・支払い・駐車場・開店日(#2〜#18)
| # | 項目名 | 説明 | 取得元(セレクタ) | 型 |
|---|---|---|---|---|
| 1 | 店名 | 店舗の正式名称 | 一覧: list-rst__name > a | テキスト |
| 2 | 住所 | 都道府県〜番地 | 詳細: th「住所」next td | テキスト |
| 3 | 電話番号 | 予約・問合せ用 | 詳細: th「電話番号」next td | テキスト |
| 4 | 最寄り駅 | 最寄り駅名(行政区域テキストより抽出) | 一覧: list-rst__area-genre テキスト | テキスト |
| 5 | ジャンル | 業態カテゴリ(複数可) | 一覧: list-rst__area-genre テキスト | テキスト |
| 6 | 昼の価格帯 | ランチ価格帯(例:¥1,000〜¥1,999) | 一覧: c-rating-v3__time--lunch | テキスト |
| 7 | 夜の価格帯 | ディナー価格帯(例:¥4,000〜¥4,999) | 一覧: c-rating-v3__time--dinner | テキスト |
| 8 | 評価点 | 食べログ総合評価スコア | 一覧: c-rating__val--strong | 数値(小数第2位) |
| 9 | 口コミ数 | 投稿された口コミの累計件数 | 一覧: list-rst__rvw-count-num | 整数 |
| 10 | 保存数 | 「行きたい」保存数(人気・撤退リスク判定用) | 一覧: js-lower-viewed テキスト | 整数 |
| 11 | 営業時間 | 曜日別営業時間帯 | 詳細: th「営業時間」next td | テキスト |
| 12 | 定休日 | 定休日・不定休など | 詳細: th「定休日」next td | テキスト |
| 13 | 席数 | 総席数(目安) | 詳細: th「席数」next td | 整数 |
| 14 | 個室 | 個室の有無・種類 | 詳細: th「個室」next td | テキスト |
| 15 | 喫煙・禁煙 | 喫煙ポリシー | 詳細: th「喫煙・禁煙」next td | テキスト |
| 16 | 支払い方法 | カード・電子マネー対応状況 | 詳細: th「支払い」next td | テキスト |
| 17 | 駐車場 | 駐車場の有無・台数 | 詳細: th「駐車場」next td | テキスト |
| 18 | 開店日 | オープン年月(YYYY-MM-01 形式) | 詳細: th「オープン日」next td | 日付(YYYY-MM-01) |
補足項目(メタデータ):
| 項目名 | 説明 | 生成方法 | 型 |
|---|---|---|---|
| 閉店フラグ | 閉店・営業終了の検出 | 詳細: p.c-alert__message / a.rst-status-badge-red__text | 真偽値(True/False) |
| URL | 食べログ店舗ページ URL | 一覧: data-detail-url 属性 | URL テキスト |
| 緯度 | 地図プロット用(丁目レベル) | 住所 → Nominatim ジオコーディング | 数値(lat) |
| 経度 | 地図プロット用(丁目レベル) | 住所 → Nominatim ジオコーディング | 数値(lng) |
| 取得日 | クロール実行日 | スクリプト実行時の日付(YYYY-MM-DD) | 日付テキスト |
CSV ファイル構造(全23フィールド):
サマリデータ(自動計算):
Airtable 構造(2テーブル):
テーブル 1:「店舗マスター」
毎週の全店舗データを蓄積。履歴管理で「保存数の推移」「営業状況の変化」を追跡
テーブル 2:「サマリ&分析」
ジャンル別、営業時間別、価格帯別の統計。コンサル資料生成用
連携方法:
Airtable API キー設定: REST API or Zapier で CSV → テーブル 自動投入
Airtable での可視化:
コンサル資料への転換:
Airtable のデータから「目黒の飲食店市場分析レポート」として PDF / HTML 自動生成。 提案先に共有する際は「この営業時間は空いています」「この業態が成功しやすい」 という根拠が一目瞭然。
| コンポーネント | ツール | 役割 |
|---|---|---|
| クロール | GAS / Python + BeautifulSoup | 食べログ自動取得 |
| スケジューリング | GAS Triggers / launchd | 週1回実行 |
| CSV 処理 | pandas (Python) / GAS | データ集計・サマリ計算 |
| DB | Airtable | マスターデータ+履歴管理 |
| ダッシュボード | Airtable views / Looker | 可視化・分析 |
⚡ 仕様決定後、ClaudeCode で 1 日で実装完了
| 時間 | タスク |
|---|---|
| 午前 | GAS スクリプト作成 & 食べログクロール実装(600件 CSV 取得) |
| 午後 1 | CSV からサマリデータ自動生成(ジャンル別、営業時間別、賃料別) |
| 午後 2 | Airtable テーブル設計 & CSV 自動投入テスト |
| 翌週月曜 | 毎週 9:00 に自動実行開始 |
仕様決定のポイント(以下を明確にしてから実装に進みます):
| 週 | アクション |
|---|---|
| Week 1 | GAS スクリプト作成 + 手動テスト(5 件) |
| Week 2 | CSV 生成 + Airtable テーブル設計+初期連携 |
| Week 3 | サマリ計算ロジック実装+自動実行検証 |
| Week 4 | 本番運用開始(全 627 件クロール+Airtable 反映) |