Linuxゲリラ戦記

画像ファイルをダウンロードする。

左を向いているペンギンみたいなキャラクター、ナックス

53.画像ファイルをダウンロードする

ナックス「こんにちは。画像収集するシェルスクリプトを作ってみたい。今回は第18回」

ナックス「今回は遂に画像ファイルをダウンロードします」

デビー君「いえーい!」

ナックス「が!先に言っておきたいことがあります」

ナックス「今回作成するプログラムを実行すると、実行時間がめちゃくちゃ長くかかります」

デビー君「そうなの?」

ナックス「はい。なので今回作成したプログラムを実行するときは時間に余裕がある時にしてください」

ナックス「もし『いくら何でも時間がかかり過ぎやろ』って思ったらCtrlキーを押しながらCキーを押せばプログラムを中断できるよ」

デビー君「Ctrlキーを押しながらCキーを押す?」

ナックス「忘れてる人は31.シェルスクリプトでプログラミング。Ctrl^Cで強制終了。をチェックだ」

ナックス「というわけで、画像をダウンロードするコードをちょちょいと書きましょう」

ナックス「CUI環境を立ち上げて『cd imagework』とコマンドを打ってimageworkディレクトリに移動してください」

$ cd imagework

ナックス「さて今回ダウンロードすると画像ファイルがimageworkディレクトリにたくさんダウンロードされることになります」

ナックス「シェルスクリプトのコードが書かれたファイルと画像ファイルが同じディレクトリにごちゃっと混ざるのが嫌なので、画像ファイルは別ディレクトリにダウンロードするようにします」

ナックス「調べたらwgetコマンドに-Pオプションを使えば、ダウンロードしたファイルの保存先を指定できるそうです」

wget -P 保存先

ナックス「今回はimageworkディレクトリの中にgazouディレクトリというのを新たに作成し、そこにダウンロードした画像ファイルを保存するようにしましょう。『mkdir gazou』とコマンドを打って、gazouディレクトリを作成してください」

$ mkdir gazou

ナックス「gazouディレクトリを作成したら、次は『nano imageget.sh』とコマンドを打って、imageget.shファイルをnanoで開いてください」

$ nano imageget.sh

ナックス「今回は、このシェルスクリプトの3行目にコードを書きます」

ナックス「list.txtファイルの画像ファイルの置き場所のリストが書かれているので『wget -i list.txt』と書けば、一気に画像ファイルをダウンロードできるのですが」

wget -i list.txt

ナックス「今回は画像ファイルの保存場所をgazouディレクトリに指定したいので-Pオプションも使って『wget -P gazou -i list.txt』というコードを3行目に書いてください」

#!/bin/sh
wget -O - "https://linuxgerira.com/imagesearch.php?q=%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99&page=1" | grep "<img" | sed -e 's/  <img src="//g' | sed -e 's/".*>//g' > list.txt
wget -P gazou -i list.txt

nanoを起動して3行目にコマンドを追記する

ナックス「書き加えたら、Ctrlキーを押しながらOキーを押した後に、Enterキーを押してファイルを保存し、Ctrlキーを押しながらXキーを押してnanoを終了してください」

ナックス「最後に『./imageget.sh』とコマンドを打って、実際にこのシェルスクリプトを実行してみましょう」

$ ./imageget.sh

imageget.shシェルスクリプトを実行する

ナックス「さて、最初に説明したようにここからめちゃくちゃ時間がかかります。『なんか時間がかかるけど頑張ってるなー』と画面を見ながら、お茶とおやつの時間にしてください」

ナックス「『いくら何でも時間がかかり過ぎだなー』って思ったらCtrlキーを押しながらCキーを押してプログラムを中断していいよ」

ナックス「プログラム終わったら『ls gazou』ってコマンドを打てばgazouディレクトリに画像ファイルが色々ダウンロードできてるのが確認できるよ」

$ ls gazou

ナックス「というわけで次回!54.wgetで時間がかかり過ぎるのをどうにかする