curl+pup+Dockerを使ってシェルスクリプトでスクレイピング
はじめに
コマンドラインあるいはシェルスクリプトでスクレイピングするときに pup
というツールを使っていましたが、1から環境構築する場合を考え Docker を利用する方法を整理してみました。
検証環境
$ uname -moi
x86_64 MacBookPro11,4 Darwin
$ bash -version | head -n 1
GNU bash, バージョン 5.0.11(1)-release (x86_64-apple-darwin18.6.0)
前提
以下のツールがインストールされていること
早速試してみる
ちょうど良さそうなサイトを探したところ、以下のサイトを見つけました。
表示されているイメージを収集してみます。
まずはページのHTMLを取得してみます。
$ curl -s https://itstudio.co/sample/flex-gallery/index.html
これを pup
ツールに食わせてパースしたいのですが、今回はローカルPCに pup
をインストールせず、 pup
インストール済みの Docker
イメージを利用してみます。
( ※初回はDockerイメージを取得するため遅いです。 )
$ curl -s https://itstudio.co/sample/flex-gallery/index.html \
| docker run -i --rm sheogorath/pup-docker ".gallery-img img attr{src}"
images/gallery_1.jpg
images/gallery_2.jpg
images/gallery_3.jpg
images/gallery_4.jpg
images/gallery_5.jpg
images/gallery_6.jpg
images/gallery_7.jpg
images/gallery_8.jpg
images/gallery_9.jpg
images/gallery_10.jpg
もし pup
がインストールされている場合は、以下のコマンドと同義です。
$ curl -s https://itstudio.co/sample/flex-gallery/index.html \
| pup ".gallery-img img attr{src}"
pup
は引数で抽出するDOM要素を指定できます。
今回はHTML内の以下の要素を取り出そうとしています。
attr{src}
で要素の src
属性が抽出できます。
最後に相対パスを絶対パスに変換します。
$ curl -s https://itstudio.co/sample/flex-gallery/index.html \
| docker run -i --rm sheogorath/pup-docker ".gallery-img img attr{src}" \
| sed 's@^@https://itstudio.co/sample/flex-gallery/@'
https://itstudio.co/sample/flex-gallery/images/gallery_10.jpg
ひとこと
~/.bashrc
に以下の設定を加えれば、 pup
がローカルPCにインストールされているかのように使うことができます。
alias pup='docker run -i --rm sheogorath/pup-docker'
ディスカッション
コメント一覧
まだ、コメントがありません