✍️ Web Text Pipe

💡 概要 (About) — Web記事からクリーンな本文を高速・堅牢に抽出するパイプラインツール
WebTextPipe は、Go言語の強力な並列処理機能と、高性能なWebコンテンツ抽出ライブラリ shouni/go-web-exact を統合した、RSS/Atomフィード特化型の高速スクレイピングCLIツールです。
RSSフィードからの記事一括並列収集と、単一URLからの高精度な本文抽出という2つの主要なワークフローを提供し、ノイズ(広告、ナビゲーションなど)を自動で排除したクリーンなテキストデータ収集パイプラインを構築します。
🌟 主な機能
- 高精度な本文抽出 (Core): 記事の本文のみを高精度で特定し、ノイズ(広告、コメントなど)を排除して整形済みテキストを返します。
- RSSフィード並列収集 (
scraper): 指定されたフィードURLから記事URLを抽出し、最大同時実行数を制御しながら並列で記事本文を一括収集します。
- 単一URL抽出 (
exact): 開発やデバッグのために、単一のURLを指定し、その記事本文を直接抽出します。
- 堅牢な処理: 処理の信頼性を高める2層リトライ構造を採用。ネットワークレベルのリトライ(
go-http-kit)に加え、アプリケーションのワークフロー層 (pkg/runner) で失敗URLに対する遅延リトライ戦略を実行します。
✨ 技術スタック (Technology Stack)
| 要素 |
技術 / ライブラリ |
役割 |
| 言語 |
Go (Golang) |
ツールの開発言語。並列処理と高速なCLI実行を実現します。 |
| コンポーネントファクトリ |
pkg/builder |
(ディレクトリパス変更) すべての依存関係を構築し、リトライ戦略を注入してrunner.Runnerを初期化するファクトリ層。 |
| 実行管理 |
pkg/runner |
(ディレクトリパス変更) フィード解析から実行制御までのワークフローを管理し、失敗URLに対するリトライ戦略も実行する上位層。 |
| コア機能 |
shouni/go-web-exact |
フィード解析 (pkg/feed)、本文抽出 (pkg/extract)、並列スクレイピング (pkg/scraper) の中核機能。 |
| 通信基盤 |
shouni/go-http-kit |
すべてのネットワーク通信における指数バックオフによる自動リトライ(低レベル)とタイムアウト制御を提供します。 |
| 並行処理 |
Goroutines / セマフォ制御 |
記事ごとの抽出処理を並列化し、最大同時実行数を厳密に管理します。 |
| CLI |
Cobra |
コマンドラインインターフェースの構築。 |
📦 使い方 (CLI Command)
1. ビルドとインストール
# Go環境が整っていることを前提とします
git clone git@github.com:shouni/web-text-pipe-go.git
cd web-text-pipe-go
go build -o bin/webpipe
2. コマンド一覧
本ツールは、用途に応じて以下の2つのサブコマンドを提供します。
| コマンド |
説明 |
主な用途 |
scraper |
RSS/AtomフィードからURLを抽出し、記事本文を並列で一括取得します。 |
大量の記事データの定期的な収集。 |
exact |
単一のURLから本文を高精度で抽出し、結果を標準出力またはファイルに出力します。 |
デバッグ、テスト、または単発の記事抽出。 |
🚀 scraper コマンド (並列収集)
フィードからの並列抽出を実行します。
フラグ一覧 (scraper)
| フラグ |
短縮形 |
説明 |
--url |
-u |
必須。解析対象のRSS/AtomフィードのURLを指定します。 |
--concurrency |
-c |
最大並列実行数。同時に処理する記事の数を制御します。(Default: 10) |
--timeout |
(なし) |
グローバル設定。HTTPリクエストのタイムアウト時間(秒)。(Default: 15) |
実行例 (scraper)
# Yahoo!ニュースのITカテゴリのRSSを読み込み、最大8並列、タイムアウト20秒で抽出
./bin/webpipe scraper \
--url "https://news.yahoo.co.jp/rss/categories/it.xml" \
--concurrency 8 \
--timeout 20
🔍 exact コマンド (単一URL抽出)
単一のWebページから本文を抽出します。
フラグ一覧 (exact)
| フラグ |
短縮形 |
説明 |
--url |
-u |
必須。抽出対象の単一WebページURLを指定します。 |
--output-file |
-o |
抽出されたテキストを保存するファイル名。省略時は標準出力に出力。 |
--timeout |
(なし) |
グローバル設定。HTTPリクエストのタイムアウト時間(秒)。(Default: 15) |
実行例 (exact)
# 指定URLから本文を抽出し、結果を output.txt に保存
./bin/webpipe exact \
--url "https://example.com/some-article" \
--output-file "output.txt"
📜 ライセンス (License)
このプロジェクトは MIT License の下で公開されています。