HTML からテキストへ
このスキルは、スクレイピングしたページ、ニュースレターの本文、フィードエントリのコンテンツなど、HTML形式のデータから、beautifulsoup4 や lxml を追加でインストールせずに、クリーンで読みやすいプレーンテキストを抽出したい場合に使用します。HTMLParser の小さなサブクラスが <script> や <style> を除去し、ブロック要素を改行に変換し、空白を整理します。これにより、LLMにコンテンツを送信する前(トークン数を削減)や、検索インデックスに投入する前に最適な形に整形できます。
呼び出すタイミング
- ユーザーが「このHTMLからテキストを取り出して」「スクレイピングしたページをクリーンにして」「タグを除去してから要約して」「このメールHTMLをテキストに変換して」と依頼した場合。
- HTMLをそのままモデルやダイジェストに入力しようとしており、マークアップが単なるノイズになっている場合。
呼び出さないほうが良いタイミング
- 構造(テーブル、リンクをMarkdown形式など)を保持する必要がある場合 — その場合は本格的なHTML-to-Markdownコンバータを使用してください。
- ページがJavaScriptでレンダリングされている場合 — まずヘッドレスブラウザで取得し、その後に変換してください。
具体的な例
ユーザー入力:
この記事のHTMLをプレーンテキストに変換して、トークン数を減らして要約できるようにして。
出力:
# assets/htmltext.py をプロジェクトにコピーしてから、次のように使います:
from htmltext import html_to_text
text = html_to_text(article_html)
summary = call_llm(f"要約:\n{text}")
<script> と <style> ブロックは完全に除去され、ブロックタグは改行に変換され、連続するスペースや空行は圧縮されるため、出力は散文のように読めます。
適用すべきパターン
html.parser.HTMLParserをconvert_charrefs=Trueを指定してサブクラス化し、文字参照が自動的にデコードされるようにします。script、style、headタグのネスト深さを追跡するためのスキップ深度を管理し、それらのテキストが出力に漏れないようにします。- ブロックタグの周囲に改行を挿入し、行内の連続する空白や複数行の空行を圧縮します。
- 純粋関数(文字列入力、文字列出力)を維持し、単体テストが簡単に行えるようにします。
参考:assets/htmltext.py。
ソース
作者のスクレイピングおよびダイジェストパイプラインから抽出しました。v1.0.0。 関連項目:[[rss-feed-reader]]、[[gemini-cost-tracker]]、[[pipeline-orchestrator]]。
→ Trawlkit を使って完全な実行可能ボットを構築してください。