次のようなリンクを持つ、大学の Web サイトから wget を使用して非常に大量の PDF ファイル (すべてのリンクを収集して照合するのは面倒、あるいは不可能) をダウンロードする必要があります。
http://example.edu/path_to_directory/directory/foobar.pdf
次のコマンドを使用しています:
wget -mk --no-check-certificate --load-cookies cookies.txt http://example.edu/arbitrary_link_to_directory/directory/
残念ながら、PDF を含む実際のディレクトリはそれぞれエラー ページにリダイレクトされ、取得されるのは一連の HTML ファイルと CSS ファイルだけです。
http://example.edu/path_to_directory/directory/
ブラウザでリダイレクトすると
http://example.edu/path_to_directory/error/error.html
wget を使用して問題のすべてのファイルをダウンロードすることは可能でしょうか?
答え1
簡単にダウンロードできない (またはダウンロードが困難である) Web サイトから大量のファイルをダウンロードしたいときは、次のようにしてファイルの URL のリストを生成します。
lynx -dump -listonly $URL | awk '/\.pdf/ {print $2}' > /tmp/pdflist.txt
次に、通常は でファイルを編集してvi
ダウンロードしたくないエントリを削除し、最後に wget ですべてを取得します。
wget --input-file=/tmp/pdflist.txt
これは単純なタスクにはうまく機能し、中程度の難易度のタスクにも十分機能します...しかし、複雑なHTMLの解析やリンクの追跡(およびCookieの使用)を伴う難しいタスクの場合は、perl
モジュールlibwww-perl
(別名ライブ壁紙)。
答え2
あなたの大学のウェブサイトには、すべての PDF へのリンクを提供するページがありますか? または、PDF ファイル名のリストをどうやって知るのですか?
その場合、スクレイパーと呼ばれるスクリプトを書いて、そのページからリンクをプログラム的に取得し、そのリストを自動的にループしてwgetなどのツールでダウンロードする必要があります。スクレイパーの作成にはPHPまたはPythonをお勧めします。元のWebサイトで最終的なページネーションを簡単に管理できます。PHPを使用する場合は、次のようにファイルをダウンロードするだけです。
file_put_contents('destination_filename', file_get_contents('source_url');