web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイルを取得するwgetは、index.htmlのみを返します

私はbashを使用するのが初めてで、Webサイトから作業中のサーバーにすべてのファイルをwgetしようとしています。ただし、返されるのはindex.htmlファイルだけです。 15分間実行しましたが、index.htmlファイルがまだダウンロードされていたため、強制終了しました。 index.htmlファイルの後にファイルをダウンロードできますか?

これが私が試しているコードです:

$ wget --no-parent -R index.html -A "Sample" -nd --random-wait \
   -r -p -e robots=off -U Mozilla --no-check-certificate \
   http://somewebsite.com/hasSamples/Sample0

Sampleで始まるサブディレクトリ内のすべてのファイルをダウンロードしようとしています。解決策を見つけるためにインターネットでかなり検索しましたが、この時点で困惑しています。オプションの正しい組み合わせが見つからなかっただけかもしれませんが、助けていただければ幸いです。これが私のコードの理解です:

  • --no-parentは、親ディレクトリを検索しないことを意味します
  • -R index.htmlは、index.htmlファイルのダウンロードを拒否することを意味します。「index.html *」も試しましたが、それでもダウンロードされました。
  • -A "Sample" Sample *のような行為はbashで行う
  • -ndは、ディレクトリではなくファイルをダウンロードすることを意味します
  • --random-waitサイトからブラックリストに登録されないようにする
  • -r再帰的にダウンロード
  • -pわからない
  • -e robots=offはrobot.txtファイルを無視します
  • U Mozillaは、ユーザーをMozillaのように見せます
  • --no-check-certificateはウェブサイトに必要です。
4
njBernstein

-Sample *がbashで行うような「Sample」のような動作

私のman wgetの読みではありません:

  • -A acclist-acclistを受け入れる
  • -R rejlist-拒否リスト

受け入れるか拒否するファイル名のサフィックスまたはパターンのコンマ区切りリストを指定します。ワイルドカード文字*、?、[または]のいずれかがacclistまたはrejlistの要素にある場合、パターンとして扱われることに注意してくださいではなく接尾辞

したがって、使用法(ワイルドカードなし)はbash glob *.Sampleと同等です。

Wgetはリンクをスキャンすることで機能します。これがおそらくindex.htmlをダウンロードしようとしている理由です(その内容が何であるかは、言っていませんが、時間がかかっただけです)。どこかに開始する必要があります。さらに説明すると:URLはnotファイルパスです。あなたはできない「階層foobar内のすべてのファイルをくれ」と言って、ディレクトリ階層であるかのようにWebサーバーをスキャンします。 foobarが実際のディレクトリに対応する場合(ファイルパスではなくURLの一部であるため、必ずしもそうである必要はありません)、Webサーバーmay自動生成されたファイルを一覧表示するindex.htmlを提供するように設定し、ファイルシステムを閲覧できるような錯覚を提供します。しかし、これはHTTPプロトコルの一部ではなく、Apacheのようなサーバーでデフォルトで使用されている規則にすぎません。したがって、wgetが行うのはスキャンです。たとえば、index.html<a href=<img src=をスキャンするなどです。これらのリンクをたどり、同じことを再帰的に実行します。これが、wgetの「再帰的」動作と呼ばれるものです。リンクを再帰的にスキャンします(繰り返します)、サーバー上のファイルシステムへのアクセス権がなく、サーバーが提供する必要がないためそれに関連する情報が含まれています。

実際の.html Webページがあり、ロードしてクリックして必要なすべてのものに移動できる場合は、そのアドレスから始めて、-r -np -k -pだけを使用します。

3
goldilocks

ブラウザでページに接続するとどうなりますか?

問題なくページを閲覧すると、いくつか欠けているものがあるかもしれません。

ページがブラウザをチェックしている可能性がありますが、Mozillaは正解ではありません。 here からブラウザ文字列の1つ(Mozillaだけでなく文字列全体)を選択し、それが機能するかどうか確認してください。

そうでない場合は、cookieが必要になる可能性があります。wgetを使用してcookieをメインページに接続し、保存してください。次に、これらのCookieでwgetを使用し、ページをダウンロードしてみます。

ミラーリングする場合は、--mirrorオプションを試してください。

何もうまくいかない場合は、接続とページを調べます。 Firefox用のライブhttpヘッダーアドオンは、かなりクールなツールです。ブラウザとWebページ間の通信全体を確認できます。 wgetでその動作を模倣して、探しているものを取得してください。

0
YoMismo