Python 3.8のままdataclassを書いてfield(default_factory)まわりでハマったことがあり、バージョン確認を軽視できないと痛感しました。環境構築でつまずかないための最低限の手順だけをここにまとめています。
Python バージョンの確認
図1: Python・仮想環境・requirements.txt のセットアップフロー
このシリーズは Python 3.9 以上を前提とする。 dataclass のフィールドデフォルト・型ヒントの記法が 3.9+ で自然に書けるためだ。 Python 3.12 を推奨するが、3.9〜3.11 でも動作する。
python --version
# または
python3 --version
Python 3.12.3
⚠️ Python 3.8 以下は非対応
Python 3.8 は 2024 年 10 月に EOL となっている。また dataclasses.field(default_factory=list) の挙動が 3.9 以降で安定しているため、必ず 3.9 以上を使用すること。
仮想環境の作成と有効化
グローバルの Python 環境を汚染しないよう、プロジェクトごとに仮想環境を作る。
Python 標準の venv モジュールで十分だが、好みで uv を使っても良い。
# プロジェクトフォルダを作成
mkdir input-extractor
cd input-extractor
# 仮想環境を作成(フォルダ名は .venv が慣例)
python -m venv .venv
# 有効化(Windows)
.venv\Scripts\activate
# 有効化(macOS / Linux)
source .venv/bin/activate
# 有効化後はプロンプトが変わる
# (.venv) C:\input-extractor>
# uv のインストール(未導入の場合)
pip install uv
# プロジェクト初期化 + 仮想環境作成
uv venv
# 有効化(Windows)
.venv\Scripts\activate
✅ 仮想環境を無効化するには
deactivate コマンドを実行する。プロンプトから (.venv) が消えれば無効化できている。
requirements.txt の全体像
シリーズ全体で使うパッケージを先にまとめておく。 PART 03・04 でそれぞれ詳細なインストール手順を説明するが、 まず全体像を把握しておくと迷わない。
# 静的ページ解析
requests==2.32.3
beautifulsoup4==4.12.3
lxml==5.2.2
# 動的ページ解析(JS レンダリング)
playwright==1.44.0
# データ出力補助(任意)
dataclasses-json==0.6.7
| パッケージ | 用途 | 必須 / 任意 |
|---|---|---|
requests | HTTP クライアント — 静的ページの HTML を取得 | 必須(静的) |
beautifulsoup4 | HTML パーサー — タグを検索・属性を取得 | 必須(静的) |
lxml | 高速 HTML パーサー(BeautifulSoup のバックエンド) | 推奨 |
playwright | ヘッドレスブラウザ — JS 生成の DOM を操作 | 必須(動的) |
dataclasses-json | dataclass を JSON に直接シリアライズ | 任意 |
# 仮想環境が有効な状態で実行する
pip install -r requirements.txt
推奨ディレクトリ構成
input-extractor/
├── .venv/ # 仮想環境(Git 管理外)
├── requirements.txt # パッケージ一覧
├── extractor/
│ ├── __init__.py
│ ├── models.py # PART 05 — dataclass 定義
│ ├── static.py # PART 06 — 静的ページ抽出
│ └── dynamic.py # PART 07 — 動的ページ抽出
├── examples/
│ └── run_extract.py # 動作確認スクリプト
└── output/ # JSON / CSV の出力先
✅ 次の章では…
PART 03 では静的ページ解析に使う requests + BeautifulSoup のインストールと動作確認を詳しく解説します。
スクレイピング環境準備でよくある誤り
Pythonのスクレイピング環境を整える際、依存関係の管理や仮想環境の設定を誤ると後工程で動作不安定になります。
| 誤り/失敗パターン | 何が起きるか | 正しい対処/防止策 |
|---|---|---|
| 仮想環境を作らずにグローバルPythonにパッケージをインストールする | 他プロジェクトとの依存バージョン衝突が起きてImportErrorが発生する | python -m venv envでプロジェクトごとに仮想環境を作成してactivateしてからインストールする |
| requestsとPlaywrightを同一スクリプトに混在させて使い分けない | JavaScriptレンダリング不要なページにもPlaywrightを使い処理が遅くなる | 静的HTMLにはrequests+BeautifulSoup、JavaScript必須ページにはPlaywrightを明確に使い分ける |
| requirements.txtを作成せずに環境を共有する | 別PCや本番環境でライブラリが揃わず動作しない | pip freeze > requirements.txtで依存関係を記録しgitで管理する |