島根県安来市のフリーランスエンジニア_プログラマー画像1

Webスクレイピングシステムの作り方【デモあり】|Python・BeautifulSoup・PostgreSQLの実装手順とコスト

「特定業界の店舗情報を自動収集したい」「Webサイトのデータを定期的にExcelに出力したい」「PythonでスクレイピングシステムをWebアプリ化したい」——そんな開発ニーズに応える記事です。本記事では、Python・BeautifulSoup・Selenium・Pandas・PostgreSQLを組み合わせたWebスクレイピングシステムの開発手順を、実際に動くデモを交えながら解説します。検索条件設定・リアルタイム進捗表示・結果一覧・Excel出力までを備えた本格的なWebアプリとして構築できます。

スクレイピング前に必ず確認すること

Webスクレイピングを実装・運用する前に、必ず以下の点を確認してください。

まず対象サイトのrobots.txtを確認します。クロール禁止が明示されているページへのスクレイピングは行ってはいけません。次に利用規約を確認します。多くのサービスでスクレイピングや自動アクセスを禁止している場合があります。また過度なアクセスでサーバーに負荷をかけないよう、リクエスト間隔を1〜3秒以上空けることが必要です。不正アクセス禁止法・著作権法・データベース権の侵害に該当する可能性もあります。法的・倫理的なグレーゾーンを避けるため、対象サイトが公開APIを提供している場合はAPIを優先して使用してください。

どんな用途に使えるか

自社マーケティング調査として、競合他社の価格情報や商品ラインナップを定期的に収集して分析できます。人力で行うと数日かかる調査をスクレイピングで自動化できます。

業務データの自動収集として、公開されている官公庁データ・不動産情報・求人情報など、定期更新が必要なデータを自動で収集してデータベースに蓄積できます。

受託開発案件として、「競合調査ツール」「価格比較システム」「リスト作成ツール」などの受託案件はニーズが高く、このサイトのような技術デモを見せることで案件獲得につながります。

用途 収集データ例 主な活用方法
競合調査 商品価格・在庫・キャンペーン情報 価格戦略の立案
市場調査 店舗情報・営業時間・口コミ 営業リスト作成
データ分析 公開統計・ニュース・SNS投稿 トレンド分析・レポート

実際に動かしてみる(デモ)

以下は実際に動作するデモです。都道府県を選択して「検索開始」を押すと、データ収集のシミュレーションが走り、進捗バーとともに結果が表示されます。収集後は「Excelダウンロード」ボタンでファイル名の確認ができます。本番実装ではこの流れをPython + BeautifulSoupで実現します。

データ収集システム(デモ)

都道府県別にデータを収集してExcel出力

🚧 デモシステム
対象
47
収集完了
0
処理中
0

検索条件設定

💡 都道府県を選択して検索開始。完了後にExcelで出力できます。

検索結果

検索結果がありません

都道府県を選択して検索を開始してください

開発手順(7ステップ)

STEP 1:スクレイピング対象サイトの選定と調査

最初にターゲットサイトをリストアップし、各サイトのrobots.txt(例: https://example.com/robots.txt)を確認してクロール可否をチェックします。利用規約でスクレイピングやデータ収集が禁止されていないかも確認します。対象ページのHTML構造はChromeのデベロッパーツール(F12)で分析し、店舗名・電話番号・住所が含まれるCSSセレクターやXPathを特定します。ページネーションの構造やAPIエンドポイントの有無も調査しておきます。

STEP 2:開発環境とライブラリの準備

Pythonが最もスクレイピングに適しています。静的なHTMLページにはrequests+BeautifulSoup4、JavaScriptで動的に生成されるページにはSeleniumまたはPlaywrightを使います。データ整形とExcel出力にはpandas+openpyxlの組み合わせが定番です。Node.jsを使う場合はPuppeteer+Cheerio+ExcelJSが対応する組み合わせです。

インストールコマンドは以下の1行です。

pip install beautifulsoup4 selenium requests pandas openpyxl lxml playwright

STEP 3:スクレイピングスクリプトの実装

基本的な実装はHTTPリクエスト送信→HTMLパース→CSSセレクターまたはXPathでデータ抽出→リスト化という流れです。ページネーションは「次のページ」リンクのURLを再帰的に取得します。エラーハンドリングとしてHTTPステータスコードのチェック、タイムアウト設定、リトライ処理を実装します。サーバー負荷軽減のためリクエスト間隔はtime.sleep(2)で1〜3秒空けることが必須です。抽出したデータは電話番号フォーマット統一・住所の標準化などの正規化処理を施します。

STEP 4:データベース設計と保存処理

PostgreSQLまたはMySQLでstoresテーブルを作成します。カラムは店舗ID・店舗名・運営会社・電話番号・住所・都道府県・収集日時が基本です。都道府県と収集日時にインデックスを設定して検索を高速化します。重複登録防止のため店舗名+住所にユニーク制約を設けます。定期更新はcronジョブ(Linux)またはタスクスケジューラ(Windows)で自動化します。

STEP 5:Webインターフェースの構築

バックエンドはFlask(シンプル)またはFastAPI(高速・モダン)が使いやすいです。実装するAPIエンドポイントは4本です。POST /api/searchでスクレイピング開始、GET /api/progressでリアルタイム進捗確認、GET /api/resultsで結果一覧取得、GET /api/exportでExcelダウンロードです。進捗表示はWebSocketまたは定期ポーリングで実装します。フロントエンドはReact・Vue.js・またはシンプルなHTML+JavaScriptで構築します。

STEP 6:Excel出力機能の実装

Pandasとopenpyxlを組み合わせてExcelファイルを生成します。ヘッダー行の背景色設定・列幅の自動調整・データ検証(電話番号フォーマットチェック)を実装します。ファイル名は日付付きで自動生成します(例: data_tokyo_20250115.xlsx)。Node.jsの場合はExcelJSライブラリが同等の機能を提供します。

STEP 7:セキュリティとデプロイ

Webアプリとして公開する場合はログイン認証を実装し、認証済みユーザーのみがスクレイピングを実行できる設計にします。同一IPからの過度なリクエスト制限(レート制限)、SQLインジェクション対策、XSS対策も必須です。デプロイ先はAWS EC2・さくらVPS・Renderが選択肢です。Herokuは無料プランが廃止されたためRenderのほうが小規模用途には向いています。

開発・運用コストの目安

Python + Flask + PostgreSQLの構成なら、MVPを10万円程度から開発できます。スクレイピング自体はライブラリが無料のため、サーバーとドメインだけで運用できます。

フェーズ 内容 費用目安
フェーズ1(MVP) スクレイピング・DB保存・Excel出力 10万〜20万円
フェーズ2(Web化) 管理画面・進捗表示・認証機能 10万〜30万円
フェーズ3(自動化) 定期実行・通知・データ差分管理 10万〜20万円
サーバー(月額) VPS・クラウド 月1,000円〜10,000円
プロキシ(月額) IPブロック対策(必要に応じて) 月0円〜30,000円
ドメイン・SSL(年額) 独自ドメイン+Let’s Encrypt 年2,000円〜5,000円

よくある質問

JavaScriptで動的に生成されるページはスクレイピングできますか?

はい。SeleniumまたはPlaywrightを使えばJavaScriptを実行した後のHTMLを取得できます。ただしHeadlessブラウザを起動するため、静的HTMLに比べて処理速度が遅く、サーバーリソースも多く消費します。対象サイトのネットワークタブを確認してAPIが存在する場合は、そちらを直接叩くほうが効率的です。

IPブロックされたらどうすればいいですか?

まずリクエスト間隔を長くする(3秒以上)、User-Agentを設定する、の2つを試します。それでもブロックされる場合はプロキシサービス(Bright Data・Oxylabsなど)を導入してIPをローテーションします。ただし頻繁にブロックされるサイトはスクレイピングを歓迎していない可能性が高いため、利用規約を再確認することをおすすめします。

スクレイピングは違法ですか?

一概に違法とは言えませんが、状況によっては不正アクセス禁止法・著作権法・データベース権の侵害に該当する可能性があります。robots.txtを無視する、利用規約で禁止されているにもかかわらず実行する、過剰なアクセスでサービスを妨害するなどの行為はリスクが高いです。法的判断については専門家への相談をおすすめします。

まとめ

Webスクレイピングシステムは Python + BeautifulSoup + PostgreSQL + Flask の構成で、MVPを10万円程度から開発できます。対象サイトの利用規約とrobots.txtの確認・適切なリクエスト間隔の設定・エラーハンドリングの実装が品質の高いシステムを作るポイントです。デモで確認した通り、検索条件設定・進捗表示・結果一覧・Excel出力を備えたWebアプリとして仕上げることで、受託開発案件としても十分な提案ができます。

開発のご相談や見積もりはお気軽にお問い合わせください。要件定義からリリースまで一貫してサポートします。

名刺管理システムの作り方完全ガイド【OCRデモあり】|API選定から実装・SaaS化まで

QuickEntry Panel – MT4プロトレーダー向け高機能発注パネルEA | ワンクリック注文取引ツール