自己リダイレクトディレクトリからwgetを使用して任意の数のファイルをダウンロードする

自己リダイレクトディレクトリからwgetを使用して任意の数のファイルをダウンロードする

次のようなリンクを持つ、大学の 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');

関連情報