Webからのデータ収集を自動化 — 営業リストもAIが作る
SECTION 14
スクレイピング(Scraping)とは、Webサイトの情報をプログラムで自動的に収集・抽出する技術です。 ブラウザで見ているページの「裏側」にあるHTML構造を解析し、必要なデータだけを取り出します。
SECTION 14
数千件のデータを数分で収集
コピペミスが発生しない
同じ処理を何度でも繰り返せる
他ツールとの連携で価値が倍増
SECTION 14
Google Apps ScriptのUrlFetchAppを使えば、
任意のURLからHTMLを取得できます。
| メソッド | 説明 |
|---|---|
.fetch(url) | GETリクエストを送信 |
.fetch(url, options) | POST等のカスタムリクエスト |
.getContentText() | レスポンスボディを文字列で取得 |
.getResponseCode() | HTTPステータスコード取得 |
.getHeaders() | レスポンスヘッダー取得 |
SECTION 14
スクレイピングでデータを正確に抽出するには、HTMLの構造を理解することが必要です。
| 用語 | 説明 | 例 |
|---|---|---|
| タグ | HTMLの要素を囲む記号 | <h3>, <div> |
| クラス | 要素のカテゴリ名 | class="name" |
| ID | 要素の一意な識別子 | id="main" |
| DOM | HTMLのツリー構造 | 親→子の階層 |
| 属性 | タグに付加する情報 | href="..." |
SECTION 14
GASではXMLパーサーが使えないため、正規表現(RegExp)を使ってHTMLからデータを抽出します。
| 目的 | パターン |
|---|---|
| メールアドレス | [\w.+-]+@[\w-]+\.[\w.]+ |
| 電話番号 | \d{2,4}-\d{2,4}-\d{4} |
| URLリンク | https?://[\w/:%#\$&\?\(\)~\.=\+\-]+ |
| タグ内テキスト | <h3[^>]*>(.+?)</h3> |
| class指定要素 | class="name">(.+?)< |
SECTION 14
コードを書かなくても、スプレッドシートの関数だけでWebデータを取得できます。
| 関数 | 取得対象 | 難易度 |
|---|---|---|
| IMPORTHTML | table要素 / リスト要素(ul, ol) | 簡単 |
| IMPORTXML | XPathで指定した要素 | 中級 |
| IMPORTFEED | RSS / Atomフィード | 簡単 |
| IMPORTDATA | CSV / TSVファイル | 簡単 |
ビジネスで活用するスクレイピング 4つのユースケース
SECTION 14
業界ポータルや企業検索サイトから、社名・住所・電話番号・URLなどを一括取得し、 営業リストを自動構築します。
| 社名 | 住所 | 電話番号 |
|---|---|---|
| 株式会社ABC | 東京都渋谷区... | 03-1234-5678 |
| DEF株式会社 | 大阪府北区... | 06-9876-5432 |
| GHI合同会社 | 福岡県博多区... | 092-111-2222 |
手動で3日かかるリスト作成が、スクリプトなら10分で完了。しかもミスなし。
Utilities.sleep(2000) で2秒待機。サーバーに負荷をかけないマナーです。SECTION 14
競合他社の価格をスクレイピングで収集し、自社の価格戦略に活かします。 GASのトリガー機能で毎日自動実行も可能です。
SECTION 14
RSSフィードからニュース記事を自動収集し、Gemini APIで要約。 毎朝のSlack投稿やメール送信まで自動化できます。
SECTION 14
求人情報を定期的にスクレイピングし、業界の給与水準、必要スキル、募集傾向を分析します。 採用戦略や自社の給与テーブル見直しに活用できます。
| 項目 | 活用方法 |
|---|---|
| 職種名 | トレンド分析 |
| 給与範囲 | 市場相場の把握 |
| 必要スキル | 研修計画への反映 |
| 勤務地 | エリア別の需要分析 |
| 企業規模 | 競合の採用動向 |
SECTION 14
スクレイピングで取得した「生のテキストデータ」は、そのままでは使いにくいことがあります。 Gemini APIを使って、自然言語を構造化データに変換します。
株式会社テックイノベーション
〒150-0001 東京都渋谷区神宮前1-2-3
TEL: 03-1234-5678 / IT・ソフトウェア
スクレイピングを安全に使うために知るべきルール
SECTION 14
Webサイトが「クロールしてよい範囲」を定義するファイル。
https://example.com/robots.txt で確認可能。
Disallow に指定されたパスはアクセスしない。
多くのWebサイトは利用規約でスクレイピングを制限・禁止しています。 特にSNS、ECサイトは明示的に禁止していることが多い。 違反は民事訴訟のリスク。
著作権法30条の4: 情報解析目的であれば著作物の利用は原則OK。 ただし、他者の利益を不当に害する場合は違法となる可能性あり。 データベースの著作物には特別な保護がある点にも注意。
ログインが必要なページを、認証をバイパスしてアクセスすると 不正アクセス禁止法に抵触する可能性。 公開ページのみを対象にするのが鉄則。
SECTION 14
実際に手を動かしてスクレイピングを体験しよう
SECTION 14
Google Driveで「新しいスプレッドシート」を作成します。名前を「スクレイピング練習」にしましょう。
以下の関数でWikipediaの表を取得します:
XPathで特定の要素だけを取得します:
数秒待つとデータが自動的に展開されます。エラーが出た場合はURLやXPathを確認しましょう。
SECTION 14
スプレッドシートの「拡張機能」→「Apps Script」を開きます。
「実行」ボタンを押し、初回は権限を承認。スプレッドシートに結果が書き込まれます。
SECTION 14
Apps Script → プロジェクトの設定 → スクリプトプロパティにGCP_PROJECT_IDを追加
JSON形式で返ってきたデータを各カラムに展開してスプレッドシートに保存します。
SECTION 14
| エラー / 症状 | 原因 | 対策 |
|---|---|---|
| 403 Forbidden | サーバーがアクセスを拒否。User-Agent未設定やIP制限 | User-Agentヘッダーを設定する。robots.txtを確認する |
| 429 Too Many Requests | 短時間に大量のリクエストを送信した | Utilities.sleep() でアクセス間隔を広げる(3〜5秒推奨) |
| HTMLが空 / 文字化け | JavaScriptで動的に生成されるページ | GASのUrlFetchAppではJS実行不可。APIやIMPORT関数を検討 |
| 正規表現で取得できない | HTMLの構造が想定と異なる | 開発者ツールで実際のHTML構造を確認する |
| IMPORTXML #N/A | XPathが正しくない、またはサイトがアクセスを拒否 | XPathを開発者ツールのCopyXPathで取得し直す |
| GAS実行時間超過 | 6分の実行制限に到達 | 処理を分割し、トリガーで複数回に分けて実行する |
Logger.log() で中間データを出力し、どのステップで問題が起きているかを特定しましょう。「実行ログ」(Ctrl+Enter)で確認できます。SECTION 14
ETL(Extract → Transform → Load)のフレームワークで整理します。
SECTION 14
GASのトリガー機能を使えば、スクレイピング処理を毎日・毎週・毎月、指定した時刻に自動実行できます。 人手をかけずにリストを常に最新に保てます。
| トリガー | 用途 |
|---|---|
| 時間ベース(毎日) | 営業リスト更新、ニュース収集 |
| 時間ベース(毎週) | 価格比較レポート |
| スプレッドシート編集時 | URL追加時に自動スクレイピング |
| フォーム送信時 | 依頼ベースのデータ収集 |
SECTION 14
業界ポータルサイトから新着企業情報をUrlFetchAppで取得
Gemini APIで企業の業種分類、従業員規模推定、関連度スコアリング
スプレッドシートに追記、重複チェック済みのクリーンデータ
新規追加企業をSlack/メールで営業チームに通知
人間は「データを集める」作業から解放され、「データを活用する」戦略立案に集中できる。
SECTION 14
GCP_PROJECT_IDSECTION 14
UrlFetchApp / IMPORTXML / 正規表現でWebからデータを自動取得
Gemini APIで生データを構造化・分類・スコアリング
スプレッドシート保存 + トリガー自動実行で完全自動化
スクレイピングは「データ収集の自動化」。AI整形と組み合わせることで、手動では不可能な規模と速度でビジネスデータを構築できる。ただし、法的・倫理的な配慮を忘れずに。
お疲れさまでした!次のセクションに進みましょう。