シリーズで学んだこと

PART学んだこと
01エンティティ抽出の目的・ユースケース・完成イメージの把握
02Python venv による再現性のある開発環境の構築
03requests + BeautifulSoup のインストールとパーサー選定
04Playwright のインストール・ブラウザバイナリ取得・OS 別注意点
05抽出対象タグ・属性の整理と Python dataclass エンティティ定義
06静的ページから label 紐付け・select 選択肢を含む完全な抽出実装
07Playwright を使った動的ページ対応・静的版との差分・使い分け判断
08フォーム仕様書 Markdown 生成・テストケースインプット生成・DB カラム候補推定
09SSL エラー・文字化け・JS 未描画・タイムアウトの対処法
10全体まとめと次のステップ(本記事)

ツール比較早見表

観点requests + BeautifulSoupPlaywright
対象静的ページ(SSR・PHP・Java 等)動的ページ(React / Vue / SPA)
速度速い(0.5〜2 秒)遅い(3〜10 秒)
JS 実行
インストールpip install requests beautifulsoup4pip install playwright + playwright install chromium
Linux 依存不要別途 install-deps が必要
推奨する場面まず試すべき第一選択肢静的版で 0 件のとき・SPA 確定のとき

実装チェックリスト

  • Python 3.9+ で仮想環境を作成・有効化した
  • requirements.txt に全パッケージを記載した
  • BeautifulSoup は beautifulsoup4(4 あり)でインストールした
  • Playwright は pip install playwright 後に playwright install chromium を実行した
  • Linux 環境では playwright install-deps chromium も実行した
  • InputEntity dataclass を extractor/models.py に定義した
  • 静的版 extract_static() を先に試し、0 件なら動的版に切り替えた
  • SSL / 文字化けなどのエラーハンドリングを実装した
  • 抽出結果を JSON で保存し、人手でレビューした

次のステップ

📌 さらに発展させるアイデア

テーマ概要
認証が必要なページへの対応 requests の Session を使ったフォームログイン、Playwright の storage_state を使ったセッション保存・復元。
XPath による高精度な label 探索 lxml の XPath を使い、より複雑な DOM 構造でも label を正確に紐付ける。
複数ページの一括処理 サイトマップから URL リストを取得し、asyncio + Playwright で並列抽出する。
DB 定義書への自動出力 InputEntity → DB カラム候補 → DDL(CREATE TABLE 文)を自動生成するパイプライン。
Web UI の作成 Streamlit や FastAPI で「URL を入力すると一覧が表示されるツール」として仕上げる。
Python — シリーズの完成コード(エントリポイント)
"""シリーズを通じて完成した extract_inputs の使い方"""
from extractor import extract_inputs
import json, dataclasses

url = "https://example.com/login"

# 静的ページ
entities = extract_inputs(url)

# 動的ページ(SPA など)
# entities = extract_inputs(url, dynamic=True)

# JSON 出力
result = [dataclasses.asdict(e) for e in entities]
print(json.dumps(result, ensure_ascii=False, indent=2))

シリーズ完走おめでとうございます

PART 01 から PART 10 まで読んでいただきありがとうございました。手作業でフォーム項目を転記していた作業を自動化する第一歩として、ぜひ実際のプロジェクトで活用してください。