HTML を jq like にパースする htmlq を試してみる。

こんにちは k-jun です。今回は jq inspire の htmlq を試してみようと思います。

https://github.com/mgdm/htmlq

前に jq の yaml 版 yq を試してみましたが、それと似たような感じでしょうか。yq は 先に yamljson へ変換した後に jq に流しているだけでしたが 笑。 htmlq は果たして。

Install

$ cargo install htmlq

Run

以前弟用に英語の単語集を作成する機会があり、単語のリストをスクレイピングで取得したことがあったので、これを htmlq を用いて簡略化してみます。

$ curl -s https://www.eigo-duke.com/tango/eiken3.html | htmlq --text 'div.eng' | head
find
decide
seem
forget
plan
see
think
believe
grow
talk
$ curl -s https://www.eigo-duke.com/tango/eiken3.html | htmlq --text 'div.jap' | head
見つける
決心する、決める
~のように思われる(見える)
忘れる
計画する
見る、わかる
考える
信じる
成長する,になる
話す

BeautifulSoup などを噛ませなくて良いので結構楽ですね...! 出力をパイプすると以下のエラーに引っかかることだけ気になりました。

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 32, kind: BrokenPipe, message: "Broken pipe" }', /Users/k-jun/.cargo/registry/src/github.com-1ecc6299db9ec823/htmlq-0.1.0/src/main.rs:159:65
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

内部の HTML のパースには html5ever が使われているようです。中身を少しだけ見て見ましたが、普通に構文解析をして Token 化しているだけみたいですね。

これで スクレイピング時に BeautifulSoup とはおさらばできそうです! それでは今回はこのへんで。