Makeコマンドを覚えたので詳しい書籍を読みたいと思い調べていると、O’ReillyのGNU Makeという書籍の電子版がGFDLに基づいてフリーで公開されているという情報を発見。
早速、wgetコマンドでファイルを一括ダウンロードしようとしたところ失敗しました。
原因や解決方法などを備忘録として残しておこうと思います。
状況
公開されている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つダウンロードするのは凄く手間で面倒なので、プログラムの自動処理は本当に便利ですね。