ナックス「というわけで、今回は検索ロボットを作ります」
デビー君「はい」
ナックス「出来ました」
デビー君「!?」
ナックス「実は、Linuxには最初から検索ロボットなコマンドがいます。その名もwgetコマンド!!」
デビー君「wgetコマンド?確か16.Linuxのエロ欲望はWindowsのゲーム欲望を凌駕するで初めて出たコマンドで、インターネットにある画像とかダウンロードできるんだよね。前回作った画像収集スクリプトでも大活躍したコマンド」
ナックス「そうです。wgetコマンドをなめてかかってはいけません。検索ロボットと言えば、リンクをたどって次から次へとページ情報を収集するロボット。今回はwgetコマンド君にリンクをたどって次から次へとwebページをダウンロードしてもらいましょう」
ナックス「検索ロボットは、最初の大元のウェブページさえ指定すれば、あとはその大元のウェブページからリンクをたどって情報を収集します。今回は始まりのページをオンラインブックマークサービスで有名な『はてな』というサイトhttp://www.hatena.ne.jpを指定してみることにします」
ナックス「とりあえず、ホームディレクトリにでも、ダウンロードした情報を置くためのディレクトリを作成しましょう」
$ mkdir ~/testrobot
ナックス「そのディレクトリに移動します」
$ cd ~/testrobot
ナックス「では、いよいよ検索ロボットを発動させます。今回はクローリングの深さ(いくつのリンクを辿るか)を3とします」
$ wget -l 3 -H -r http://www.hatena.ne.jp
ナックス「-l 3 の l はエルの小文字です。数字のイチではないので気をつけて!」
ナックス「実行すると、wgetが引くほどウェブサイトのダウンロードを始めます。私も、しばらくダウンロードが終わるのを待って見ましたが、なんかもう永遠に終わらないくらいにダウンロードしやがるので、Ctrlキーを押しながらCキーを押して強制終了しました」
ナックス「というわけで、wgetコマンドのオプションの解説だ!!」
デビー君「はーい」
ナックス「まず、-rオプション。このオプションをつけるだけで、リンクをたどって次々とダウンロードしてくれます。なにそれ素敵!」
ナックス「-l 3 はクローリングの深さ、つまり、リンクをどの深さまで辿るかを指定します」
デビー君「え?リンクを3回だけ辿るの?3回だけ辿るだけなのに、あんなに大量のファイルをダウンロードするの?」
ナックス「わかりやすく説明しましょう。今回は『はてな』のサイトからリンクをたどりました。まず、この『はてな』http://www.hatena.ne.jpに、リンクが50個あったとしましょう、wget検索ロボット君は、まずhttp://www.hatena.ne.jpのサイトをダウンロードした後、その50リンクのすべてのページをダウンロードしようとします。これが、深さ1」
デビー君「深さ1で、まず51ページダウンロードしようとするね」
ナックス「次に。その50ページ全てに、50のリンクがあるとします。wget検索ロボット君は、50ページすべての50リンクをダウンロードしようとします。つまり2500ページダウンロードしようとします。この時点で深さ2」
デビー君「深さ2の時点で51 + 2500で2551ページをダウンロードしようとするんだね」
ナックス「さらに2500ページ全てにリンクが50あったとすると、2500ページすべての50リンクをダウンロードしようとするので1万2500ページを更にダウンロードしようとします。これで、深さ3、つまり、-l 3で指定した数に達しました」
デビー君「じゃあ、深さ3で51 + 2500 + 1万2500で全部で1万5051ページダウンロードしようとするの!?ひえー!!」
ナックス「ちなみに、-rオプションを指定して、-l オプションを指定しなかった場合はデフォルトで深さ5のクローリングを行います」
ナックス「最後が-Hオプション。このオプションを指定しない場合は、http://www.hatena.ne.jpというアドレス配下のウェブページだけダウンロードしようとしますが、-Hを指定することで、http://www.hatena.ne.jpというアドレス以外のページ、すなわちリンクでつながっているサイトを全てダウンロードします」
デビー君「へー」
ナックス「で、今回は-l 3と指定することで、3の深さまでのクローリングを行いましたが、-l infと指定することで、ダウンロードできる極限までダウンロードします。リンクが続く限り、どこまでもどこまでも……」
ナックス「すなわち」
$ wget -l inf -H -r http://www.hatena.ne.jp
ナックス「と指定するだけで、インターネット上の全ての情報をダウンロードしようとします」
デビー君「なにそれ怖い」
ナックス「ちなみにこのコマンドは実行しないでね」
デビー君「え?実行しちゃったけど?」
ナックス「実行しちゃったら、Ctrlキーを押しながらCキーを押して強制終了してください」
デビー君「なんで実行しちゃダメなの?」
ナックス「マジで全世界のインターネットの情報をダウンロードしようとしますので、あなたのパソコンの記憶容量を超えてダウンロードしようとします。すなわち、ハードウェアエラーが起こったりして最悪パソコンが壊れます」
デビー君「なにそれ怖い」
ナックス「さて、前回、インターネットから直に欲しい情報だけダウンロードは難しいと言いましたが、なんとなく頑張れば出来る気がしてきたので、次回から頑張って作ってみます」
デビー君「まじですか」
ナックス「次回!!まずはwgetで取得した情報からimgタグ情報を取り出す(64.wgetを使った画像収集プログラムを作ろう)!!」