HTML を jq like にパースする htmlq を試してみる。
こんにちは k-jun です。今回は jq inspire の htmlq を試してみようと思います。
前に jq の yaml 版 yq を試してみましたが、それと似たような感じでしょうか。yq は 先に yaml を json へ変換した後に 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 とはおさらばできそうです! それでは今回はこのへんで。