man wget Linux

Makeコマンドを覚えたので詳しい書籍を読みたいと思い調べていると、O’ReillyのGNU Makeという書籍の電子版がGFDLに基づいてフリーで公開されているという情報を発見。

早速、wgetコマンドでファイルを一括ダウンロードしようとしたところ失敗しました。

原因や解決方法などを備忘録として残しておこうと思います。

 

 

状況

オライリージャパン GNU make

O’Reilly Japan – GNU Make 第3版

公開されているPDFのURLは下のようになっています。

https://www.oreilly.co.jp/library/4873112699/mae.pdf
https://www.oreilly.co.jp/library/4873112699/maegaki.pdf
https://www.oreilly.co.jp/library/4873112699/contents.pdf
https://www.oreilly.co.jp/library/4873112699/ch01.pdf
https://www.oreilly.co.jp/library/4873112699/ch02.pdf
...
https://www.oreilly.co.jp/library/4873112699/ato.pdf

見ての通り、章毎に分割しPDFファイルとして公開されています。

失敗

次のwgetコマンドを実行すると一括ダウンロードに失敗しました。

# 一括ダウンロード(失敗)
$ wget -r -np https://www.oreilly.co.jp/library/4873112699/

# 単体のダウンロード(成功)
$ wget https://www.oreilly.co.jp/library/4873112699/mae.pdf

試しにファイル単体でのダウンロードを試みると、こっちは問題なくダウンロードできました。

原因

lsコマンドで一括ダウンロードしたファイルを確認してみます。

$ ls -R
./www.oreilly.co.jp:
library  robots.txt

./www.oreilly.co.jp/library:
4873112699

./www.oreilly.co.jp/library/4873112699:
index.html

4873112699ディレクトリ下をダウンロードしたつもりが「robots.txt」というファイルがダウンロードされています。

$ cat www.oreilly.co.jp/robots.txt
User-agent: *
Disallow: /mt
Disallow: /manager
Disallow: /app
Disallow: /catalog/catalog0809.pdf
Disallow: /catalog/catalog2011.pdf
Disallow: /catalog/catalog2013.pdf
Disallow: /catalog/catalog2015.pdf
Disallow: /catalog/catalog2016.pdf
Disallow: /ebook/download
Disallow: /pub/outgoing
Disallow: /pub/tools
Disallow: /library

robots.txtを確認してみると、/libraryディレクトリが「Disallow=禁止」と書かれており、どうやらこれが原因のようです。

robots.txtについて今一度調べてみると、Googleのヘルプでは下記のように書かれています。

robots.txt ファイルはサイトのルートに配置するファイルで、検索エンジンのクローラにアクセスされたくないサイトのコンテンツを指定します。ファイル内の指示は、サイトにアクセスするクローラの動作に対し強制力はなく、サイトにアクセスするクローラへのディレクティブとして機能します。

Googlebot などの信頼できるウェブクローラは robots.txt ファイルの指示に従いますが、他のクローラも従うとは限りません。そのため、ウェブクローラから情報を継続して保護するには、サーバー上の非公開ファイルをパスワードで保護する方法など、他のブロック方法を利用することをおすすめします。

解決

GNU Wget 1.18 Manual: Robot Exclusionによると、robots.txtの設定を無効にするにはwgetの-eオプションを利用すると良いようです。

# robots.txtの設定を無効にしてPDFのみ一括ダウンロード
$ wget -r -np -A pdf -e robots=off https://www.oreilly.co.jp/library/4873112699/

# ダウンロードしたファイルの確認
$ ls -R
./www.oreilly.co.jp:
library

./www.oreilly.co.jp/library:
4873112699

./www.oreilly.co.jp/library/4873112699:
appA.pdf  ato.pdf   ch03.pdf  ch06.pdf  ch09.pdf  ch12.pdf      maegaki.pdf
appB.pdf  ch01.pdf  ch04.pdf  ch07.pdf  ch10.pdf  contents.pdf  mae.pdf
appC.pdf  ch02.pdf  ch05.pdf  ch08.pdf  ch11.pdf  index.pdf

wgetコマンドのeオプションにrobots=offを渡すとrobots.txtで禁止されているファイルも一括ダウンロードされました。

1つ1つダウンロードするのは凄く手間で面倒なので、プログラムの自動処理は本当に便利ですね。

 


 

【Linux】wgetで一括ダウンロードができない時の原因と対処方法
Tagged on:     

コメントを残す