Hacker NewsやReuters Japanなどのニュースサイトをスクレイピングし、機械学習モデルやデータ分析パイプラインで利用しやすいJSON/CSV形式に変換する非同期スクレイピングツールです。TyperベースのCLIから複数サイトを並列に処理し、データ検証やエクスポートまで一括で実行できます。
- 非同期スクレイピング:
aiohttpを使った並列HTTPリクエストで高速にデータ取得。 - 統一的なデータモデル: Pydanticモデルで定義されたスキーマに沿ってデータを整形。
- 設定ファイルによる制御:
config/settings.yamlからサイト別設定や出力パラメータを管理可能。 - CLIバリデーション:
--validateオプションでスクレイパーの健全性とサイト接続状況を診断。 - 柔軟なエクスポート: JSON/CSVのどちらか、または両方のフォーマットを選択し、出力先を指定可能。
- Python 3.12
- Poetry 1.8 以降(依存関係とツールチェーンの管理に使用)
互換性維持のための最低バージョンは
pyproject.tomlを参照してください。
- リポジトリをクローンします。
- Poetryで依存関係をインストールします(開発ツールも含めてセットアップする場合)。
poetry install --with dev- 仮想環境に入る場合は
poetry shellを実行するか、コマンドの前にpoetry runを付けてください。
ランタイムに必要な最小依存関係のみをpipでインストールしたい場合は
pip install -r requirements.txtでも利用できますが、CIと同じ開発体験を得るにはPoetryの利用を推奨します。
まずはヘルプを確認します。
poetry run python main.py --help| コマンド例 | 説明 |
|---|---|
poetry run python main.py --sites hackernews |
Hacker Newsから最新記事を取得(デフォルト30件)。 |
poetry run python main.py --sites hackernews --limit 10 |
取得件数を10件に限定。 |
poetry run python main.py --sites hackernews --output data.json |
出力ファイルを指定。 |
poetry run python main.py --sites hackernews --format csv |
CSV形式でエクスポート。 |
poetry run python main.py --sites hackernews --format both |
JSONとCSVの両方で出力。 |
poetry run python main.py --list-sites |
利用可能なスクレイパー一覧と有効/無効状態を表示。 |
poetry run python main.py --validate --sites hackernews reuters_japan |
対象サイトの動作検証を実行。 |
poetry run python main.py --config-path custom.yaml |
独自設定ファイルを使用。 |
poetry run python main.py --verbose |
ログレベルをDEBUGに上げて詳細ログを出力。 |
簡単な実行例は example.py から確認できます。
poetry run python example.py--validate フラグはスクレイパーの接続性、データ取得、サイト固有チェックを行い、結果を ValidationResult としてまとめます。稼働前の動作確認や、定期監視用のヘルスチェックとして活用してください。
config/settings.yaml でスクレイピング対象サイトやログ設定、出力フォーマットを制御できます。
defaults.limit: 取得件数のデフォルト値。defaults.output_format:json/csv/bothを指定。sites.<name>.enabled: サイトごとの有効/無効切り替え。logging: ログ出力ファイルやフォーマットを管理。
CLIの --config-path オプションを使うと、任意の設定ファイルで上書きできます。複数環境で利用する場合は設定ファイルを分けておくと便利です。
Poetryで開発用依存関係をインストール済みであることを前提とします。
poetry run pytest
poetry run pytest --cov=src tests/特定のテストのみを実行したい場合は -k やパス指定を活用してください。
poetry run mypy src/ main.py example.py型スタブはPoetry経由で自動的にインストールされるため、追加の準備は不要です。
ruff をLintとフォーマッタの両方に利用しています。
poetry run ruff check src/ main.py example.py
poetry run ruff format src/ main.py example.pyCIと同じフォーマットかどうかを確認したい場合は ruff format --check を使用してください。
eventscraper/
├── config/ # 設定ファイル
│ └── settings.yaml
├── main.py # TyperベースのCLIエントリーポイント
├── example.py # サンプル実行スクリプト
├── src/
│ ├── scraper/ # 各サイトのスクレイパー実装
│ ├── models/ # Pydanticデータモデル
│ └── utils/ # 設定・エクスポート等のユーティリティ
├── tests/ # pytestベースのテストスイート
├── pyproject.toml # Poetry設定とツールチェーン定義
├── poetry.lock # 依存関係ロックファイル
└── requirements.txt # ランタイム依存パッケージ(pip用)
このプロジェクトのライセンス情報はリポジトリに含まれるファイルを参照してください。