curlを使用してWebページからすべてのファイルを取得する


86

私が使用して、次のページから、すべてを一度に、ファイルをダウンロードしたいと思いますcurlhttp://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

試したところcurl http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/、ターミナルに大量の行が返されましたが、ファイルを取得できませんでした。

回答:


125

wget代わりに使用してください。brew install wgetHomebrewをインストールしている場合、またはsudo port install wgetMacPorts をインストールしている場合は、それをインストールできます。

ディレクトリリストからファイルをダウンロードするには、-r(再帰)、-np(親ディレクトリへのリンクをたどらない)を使用し-k、ダウンロードしたHTMLまたはCSSのリンクがローカルファイルを指すようにします(クレジット@xaccrocheur)。

wget -r -np -k http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

その他の便利なオプション:

  • -nd (ディレクトリなし):すべてのファイルを現在のディレクトリにダウンロードします
  • -e robots.off:robots.txtファイルを無視し、robots.txtファイルをダウンロードしないでください
  • -A png,jpg:拡張子を持つファイルのみを受け入れるpngか、jpg
  • -m (鏡): -r --timestamping --level inf --no-remove-listing
  • -nc--no-clobberファイルが存在する場合、ダウンロードをスキップします

3
wget -r -np -k http://your.website.com/specific/directory。トリックは-k、ローカル表示用にリンク(画像など)を変換するために使用することです。
yPhil 14

brewそしてportwgetのをインストールするには、私のために動作しません。私は何をすべきか?
ホセインHeydari

@HoseynHeydari:osxのコンパイル済みバイナリにrudix.orgを使用できます。だからあなたはrudixをインストールしてから使用する必要があります:sudo rudix install wget
Mamonu

このオプション-kは常に機能するとは限りません。たとえば、再帰的にキャプチャしようとしているWebページ上の同じファイルを指す2つのリンクがある場合wget、最初のインスタンスのリンクのみを変換し、2番目のインスタンスのリンクは変換しないようです。
くん

22

curl単一のWebページファイルのみを読み取ることができます。取得した一連の行は、実際にはディレクトリインデックスです(そのURLにアクセスすると、ブラウザにも表示されます)。curlUnixツールを使用してファイルを取得するには、次のようなものを使用できます

for file in $(curl -s http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/ |
                  grep href |
                  sed 's/.*href="//' |
                  sed 's/".*//' |
                  grep '^[a-zA-Z].*'); do
    curl -s -O http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/$file
done

これにより、すべてのファイルが現在のディレクトリに取得されます。

より詳細なニーズ(フォルダー/ディレクトリを含むサイトから多数のファイルを取得することを含む)の場合は、wget(別の回答で既に提案されているように)より良いオプションです。


ありがとうございました。これは素晴らしい解決策であり、動作例を提供するのは素晴らしいことです!
egelev

1
xmllint --html --xpath '//a/@href'は、おそらくよりも優れたパーサーですgrep
セビング

7

参照:http : //blog.incognitech.in/download-files-from-apache-server-listing-directory/

次のコマンドを使用できます。

wget --execute="robots = off" --mirror --convert-links --no-parent --wait=5 <website-url>

各オプションの説明

  • wget:CURLリクエストを作成し、ローカルファイルをリモートファイルにダウンロードする簡単なコマンド。
  • --execute="robots = off":これにより、ページをクロールするときにrobots.txtファイルが無視されます。すべてのファイルを取得していない場合に役立ちます。
  • --mirror:このオプションは、基本的に、指定されたURLのディレクトリ構造をミラーリングします。それは次のこと-N -r -l inf --no-remove-listingを意味するショートカットです:
    • -N:ローカルよりも新しいファイルでない限り、ファイルを再取得しないでください
    • -r:再帰的なダウンロードを指定する
    • -l inf:最大再帰深度(infまたは無限の場合は0)
    • --no-remove-listing: '.listing'ファイルを削除しないでください
  • --convert-links:ダウンロードしたHTMLまたはCSSでリンクを作成してローカルファイルを指す
  • --no-parent:親ディレクトリに登らないでください
  • --wait=5:取得の間に5秒待機します。サーバーをスラッシングしないようにします。
  • <website-url>:これは、ファイルのダウンロード元のWebサイトのURLです。

ハッピーダウンロード:スマイリー:


3

あなたは使用することができますhttrack自作経由でWindows / MacOSのために利用可能なとインストールを。


私にとって何か新しいこと、ありがとう。最高ののは、迅速かつ迅速なことです。1つのライナー。脂肪を切って、すべてのゴミを避けてください。
ピーターTeoh

0

GUIを使用してアプリケーションを使用したい人には、Mac OS X用の安価なシェアウェアプログラムDeepVacuumwgetがあります。これは、一般的に必要なタスクを処理できるプリセットのリストで、ユーザーフレンドリーな方法で実装します。独自のカスタム構成をプリセットとして保存することもできます。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.