41.ウェブサイトをダウンロードしてみる
ナックス「こんにちは。画像収集するシェルスクリプトを作ってみたい。今回は第6回」
ナックス「画像収集スクリプトは、最終的には好きな検索キーワードでたくさんの画像を収集するシェルスクリプトを作りたいのですが、とりあえず最初の目標は、自分で決めた検索キーワードで、検索結果1ページ目の画像だけ収集するスクリプトを作る、というのを目標としましょう」
デビー君「はーい」
ナックス「というわけで、画像収集に使いたい検索キーワードを自由に決めてください」
ナックス「今」
デビー君「今!?」
ナックス「うん」
デビー君「唐突……」
ナックス「例えば『美少女の画像だけ集めたい』なら、例えば『乃木坂』みたいな検索キーワードを使えば、美少女の画像だけ集められます」
デビー君「ほう……」
ナックス「『美男子の画像だけ集めたい』なら、例えば『ジャニーズ』みたいな検索キーワードを使えば、美男子の画像だけ集められます」
デビー君「ほう……」
ナックス「『アニメが好き』なら、例えば『アニメ』みたいな検索キーワードを使えば、アニメの画像だけ集められます」
デビー君「ほう……」
ナックス「こんなにぼんやりした検索キーワードじゃなくても、例えば『ポケモン』とか『ジャニーズ 嵐』とか『白石麻衣』とか、好きな検索キーワードを使用して大丈夫です。せっかくなので自分のテンションが上がる検索キーワードを使用してください」
ナックス「今後の解説では、検索キーワードとして『公式壁紙』を検索キーワードとして使いますが、これを見て学習している皆さんは好きな検索キーワードを使用して大丈夫です」
デビー君「はーい」
ナックス「さて、今回は試しに画像検索結果のページをダウンロードしてみます」
ナックス「まずいつも通りCUI環境を立ち上げましょう」
デビー君「はーい。立ち上げました」
ナックス「Webページのダウンロードは『wget "ページのアドレス"』で出来ます」
$ wget "ページのアドレス"
デビー君「へー」
ナックス「これを実際に一緒にやってみましょう」
ナックス「まず、wgetと書いてください。ただし、Enterキーを押さないでください(実行しないでください)」
$ wget
デビー君「書きました」
ナックス「次に、スペースキー(キーボード手前にある、やたら横長のキー)を押してスペースを一つ開けてください。ただし、Enterキーを押さないでください(実行しないでください)」
$ wget
デビー君「スペースを一つ開けました」
ナックス「次にダブルクォーテーション(")を入力してください。Shiftキーを押しながら2キーを押せば入力できます。分からない場合は下の画像をクリックしてみてください。画像で説明しています」
$ wget "
ナックス「次にWebブラウザから画像検索で、自分で決めた好きな検索キーワードで検索して、検索結果を表示してください」
デビー君「表示しました」
ナックス「その状態で、アドレスを」
ナックス「全部選んで(多分、Ctrlキーを押しながらLキーを押すと全部選択した状態に出来ます。うまくいかないようであれば、文字の上にカーソルを載せて、右クリックを押しながら横に動かすと、文字に色がついて、文字を選んだ状態(文字を選択した状態)に出来ます)」
ナックス「右クリックを押して『コピー』を選びます。『コピー』みたいな選択肢が表示されない場合は、アドレスを全部選択した状態で、その選択した文字の上で右クリックを押すと、『コピー』みたいな選択肢が表示されると思うので、それを選択してください」
デビー君「コピーを選びました」
ナックス「さて、見た目には何も起きていませんが、今の『コピー』によって、あなたのパソコンが選んだ文字を記憶しています。今回はアドレスの文字を選んでコピーしたので、あなたのパソコンがアドレスの文字を記憶しています」
ナックス「次は、先ほどのCUI環境に戻ってください。wgetの後に一つスペースを開けてダブルクオーテーションを入力しましたよね?」
デビー君「しました」
ナックス「そこで右クリックすると『貼り付け』(または『ペースト』)というメニューが表示されるので、それを選んでください。先ほどパソコンが覚えた(アドレスの)文字が貼り付けられます」
$ wget "https://linuxgerira.com/imagesearch.php?q=%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99&page=1
デビー君「お、文字が貼り付けられた」
ナックス「さて、この時点で神経質な方は思うはずです。『あれ?アドレスの文字列と貼り付けした文字列が違うぞ?』と。例えば『公式壁紙』を検索キーワードとして使用した場合、アドレスの文字列と実際に貼り付けられた文字列は以下のように異なります」
- アドレスの文字列
- https://linuxgerira.com/imagesearch.php?q=公式壁紙&page=1
- 実際に貼り付けられた文字列
- https://linuxgerira.com/imagesearch.php?q=%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99&page=1
デビー君「うん。確かに違う」
ナックス「皆さんも、自分が決めた検索キーワードによって、それぞれに違うと思います」
ナックス「実は、本当はアドレスに日本語は使えません。つまり、『アドレスの文字列』の日本語『公式壁紙』の部分は本来ではアドレスに使えない文字列なのです」
デビー君「そうなの?」
ナックス「ただし、アドレスの技術を作った人は考えました。『アドレスに日本語は使えないけど、日本語を表現する技術を作ろう』。それが上の例で言えば、実際に貼り付けられた文字の『%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99』の部分です。『%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99』こそがアドレスの真の姿。つまり、実際に貼り付けられた文字列の方がアドレスの真実の姿なんです」
ナックス「ただ、最近のWebブラウザはなぜかアドレスバーにアドレスを表示するときに『%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99』の部分を、気を使って日本語『公式壁紙』で表示するようになっています」
デビー君「ほう?」
ナックス「まとめると、今回『公式壁紙』という検索キーワードで検索した検索結果のアドレスは、以下です」
https://linuxgerira.com/imagesearch.php?q=%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99&page=1
ナックス「Webブラウザさんも、内部的には以下のアドレスが正しいことがきちんと分かっています」
https://linuxgerira.com/imagesearch.php?q=%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99&page=1
ナックス「だから『コピー』して『貼り付け(またはペースト)』した文字列も以下のアドレスであり、これで正しいです」
https://linuxgerira.com/imagesearch.php?q=%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99&page=1
ナックス「ただし、最近のWebブラウザさんは、アドレスバーを見ている人に気を使って、アドレスを表示するときにだけ『%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99』の部分をわざわざ日本語の『公式壁紙』に変換して以下のように表示してます」
https://linuxgerira.com/imagesearch.php?q=公式壁紙&page=1
ナックス「分かってくれた!?」
デビー君「全然分からん」
ナックス「じゃあ、もうええわ!」
ナックス「シンプルに言えば『アドレスと、貼り付けた文字が違うけど、そのままで大丈夫です』ということが言いたいです」
デビー君「オッケー」
ナックス「さて、アドレスはダブルクオーテーションで囲む必要があるので、最後にもダブルクオーテーションの文字を入力してください。ダブルクオーテーションはShiftキーを押しながら2のキーを押すと入力できますよ」
$ wget "https://linuxgerira.com/imagesearch.php?q=%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99&page=1"
ナックス「Enterキーを押して実行してください。検索結果のWebページがダウンロードできます」
ナックス「ダウンロードが無事にできたら、lsコマンドを使ってファイル一覧を確認してみてください」
$ ls
デビー君「『imagesearch.php?q=公式壁紙&page=1』という謎のファイルがダウンロードできたことを確認できる」
ナックス「そうでしょう。この謎のファイルのファイル名は、あなたが決めた検索キーワードによってそれぞれ異なると思いますが、ともかくこんな感じのファイルがダウンロードできたと思います。このファイルが何かという話はまた次回(42.ダウンロードしたウェブサイトのファイルをnanoで開いてみる)」