pupを使ってコンソール上でスクレイピングする
curlとかwgetとか使っているといっそコンソール上でスクレイピングしたくなることがよくあります。
自分でパーサを書くのも面倒だし何かないかなと探していたらpupなるものを見つけました。
動作
標準入力 or ファイルの内容をCSS Selectorで検索、抽出し、標準出力に表示します。
つまり、パイプを通し放題なわけです。便利ですね。
出力形式は
- HTML
- テキスト
- json
のうちどれか一つを指定することが出来ます。また、あるElementのあるAttributeの値だけを出力、なんてことも出来ます。
勿論、pupで出力した結果をパイプしてgrepしたりtrして更に加工してもいいでしょう。pupの結果をpupにパイプしたりしてもいいと思います。
インストール
Release Pageにコンパイル済みの実行ファイルが置いてあります。
Go言語の環境がインストールされていればgo getで、Mac使ってるならbrewでもいいみたいです。
使い方
GitHubのQuick StartとExampleを見ておけば十分です。
出力形式の指定
Display Functionsと言うセクションに書いてあります。
指定しなければHTML形式のまま出力されます。
attr{attrkey}を上手く活用すればXMLのパースもそこそこ容易に可能なので、コンソール上で動くRSSリーダーなんかも作れたりします。
オプション
オプション | 省略形 | 動作 |
---|---|---|
—color | -c | 出力結果を色付きで表示してくれる。 |
—file filePath | -f | filePathに指定したファイルを使用する。 |
—help | -h | ヘルプを表示する。 |
—indent count | -i | countに指定した数値の数だけインデントする。(html、jsonのみで有効) 指定しないとデフォルトのインデントが入る。 |
—number | -n | 出力された結果の番号を表示してくれる…らしいのだが、指定すると「そんなオプションはない」と怒られる。 ソースを見てみると確かにない。何だこれ。 |
—limit level | -l | level以上の要素を「…」として表示します。いっそ表示してくれないほうがありがたいんだが。 textも1レベルとしてカウントするので注意。 |
—charset charset | N/A | UTF-8やEUC-JP以外のものを読み込ませる時に使うのだと思われるが、どんな値が指定できるのかよくわからない。 内部ではcharset.Lookupにそのまま値を渡しているが、これまたどんな値が指定できるのかよくわからない。 試しに「Shift-JIS」を渡したら上手く行ったので、常識の範囲内で指定してあげて下さい。 |
—version | N/A | バージョンを表示します。 |
まとめ
そんなわけで、pupを入れればちょっとしたスクレイピングならコンソールだけで簡単に出来てしまいます。
一々何らかの言語でパースしてた人は試してみてはいかがでしょうか。