hq:118⭐の軽量HTMLコマンドラインプロセッサ

コマンドラインでJSONを処理するならjq、CSVならcsvkit、ではHTMLは?今日紹介する軽量なニッチツール hq は、CSSセレクタだけでWebページからデータを抽出できます。

プロジェクト概要

属性内容
GitHubcoderobe/hq
Stars118
言語C++
ライセンスGPL-3.0
最終更新2025年3月

解決する問題

スクレイピングやWebページからデータを抽出する際、既存のツールは重すぎる(Python + BeautifulSoup)か、機能が単一すぎる(grep、awkでHTMLを処理するのは面倒)ことがあります。

hqの位置づけはシンプルです:CSSセレクタを使ってコマンドラインでHTMLを処理する。まるでjqでJSONを処理するように直感的です。

主な機能

hqは3つの処理モードを提供します:

1. data モード - 生のHTMLを抽出

curl -s https://example.com | hq "div.article" data

マッチした要素の完全なHTMLを返します。

2. text モード - プレーンテキストを抽出

curl -s https://example.com | hq "h1" text

要素の内部テキストを抽出します。フォーマットオプションをサポート:

  • plain - プレーンテキスト(デフォルト)
  • ansi - ANSIカラー付き
  • md - Markdown形式

3. attr モード - 属性を抽出

curl -s https://example.com | hq "a" attr href

指定した属性の値を抽出します。例えばすべてのリンクURLを取得します。

使用例

Webページのすべてのリンクを抽出

curl -s https://news.ycombinator.com | hq "a.storylink" text

記事本文を抽出

curl -s https://example.com/blog/post | hq "article p" text plain

画像リンクを一括取得

curl -s https://example.com/gallery | hq "img" attr src

インストール方法

ソースからコンパイル:

git clone https://github.com/coderobe/hq.git
cd hq
meson build && ninja -C build
# コンパイル後は build/hq に配置

依存関係:

  • meson(ビルドシステム)
  • modest(HTMLパースライブラリ)

技術実装

hqはModestライブラリを基盤に構築されています。これは高性能なHTMLパーサーです。C++で実装されているため処理速度が保証され、パイプライン操作やバッチ処理に適しています。

使用シナリオ

  • クイックスクレイピング - Pythonを書かずに一行コマンドでデータ抽出
  • ログ分析 - HTML形式のログやレポートを処理
  • 自動テスト - Webページの出力内容を検証
  • データクレンジング - HTMLから構造化データをエクスポート

他のツールとの比較

ツールStars特徴
htmlq7.5kRust実装、機能が豊富
pup8.2kGo実装、jq風の構文
hq118C++実装、ミニマルデザイン

hqの利点はシンプルで直感的な点です。複雑な構文はなく、3つのモードで一般的なニーズをカバー。ソースコードは数百行だけで、理解と修正が容易です。

使用上の注意

  1. CSSセレクタサポート - Modestをベースに、標準CSS3セレクタをサポート
  2. 入力ソース - ファイル(-f)または標準入力をサポート、パイプライン対応
  3. 出力区切り - デフォルトは改行区切り、-dでカスタマイズ可能、-0でnull文字(xargs -0と併用)

まとめ

hqは小さく洗練されたツールで、「とにかく素早くデータを抽出したい」というシーンに最適です。膨大な依存関係をインストールする必要も、スクリプトを書く必要もありません。CSSセレクタ一つで済みます。

日常でHTMLを処理する必要がある開発者にとって、ツールボックスに入れておく価値があります。


プロジェクト情報

属性内容
リポジトリhttps://github.com/coderobe/hq
ライセンスGPL-3.0
言語C++
メンテナ@coderobe

記事は gumi.ink で公開