1

wgetを使用して、Webサイトのフォルダーの下にあるすべてのフォルダー構造とファイルをダウンロードしようとしています。

次のような Web サイトがあるとします。

http://test/root. Under root it is like


/A

    /A1/file1.java

/B

    /B1/file2.html

私のwgetコマンドは次のとおりです。

wget -r http://test/root/

すべてのフォルダーと html ファイルを取得しましたが、Java ファイルは取得しませんでした。何故ですか?

更新1:

次を使用して、ブラウザでファイルにアクセスできます。

http://test/root/A/A1/file1.java

以下を使用して、この個々のファイルをダウンロードすることもできます。

wget http://test/root/A/A1/file1.java
4

2 に答える 2

1

wgetリンクをたどることができます。

サブディレクトリ内のファイルへのリンクがない場合、wget はそれらのファイルを見つけられません。ファイル名を推測wgetせず、ファイル名を徹底的にテストせず、ブラック マジックを実行しません。wget

于 2012-08-02T21:36:25.680 に答える
0

ブラウザでファイルにアクセスできるからといって、wget必ずしもそれを取得できるとは限りません。あなたのブラウザはディレクトリ構造を認識できるコードを持ってwgetいます。

最初に Java ファイルをacceptリストに追加してみてください。おそらくそれだけで十分です。

wget -r -A "*.java" http://text/root

しかし、サイトの完全なオフライン ミラーを取得しようとしているようです。理解しようとしている他のコマンドと同様に、次のコマンドから始めましょうman wget

Wget は、HTML、XHTML、および CSS ページのリンクをたどって、リモート Web サイトのローカル バージョンを作成し、元のサイトのディレクトリ構造を完全に再作成することができます。これは、 「再帰的ダウンロード」と呼ばれることもあります。その際、Wget は Robot Exclusion Standard (/robots.txt) を尊重します。オフラインで表示するために、ダウンロードしたファイル内のリンクをローカル ファイルを指すように変換するようにWget に指示できます。

私たちの必要なもの

1. ダウンロードするファイルへの適切なリンク。

intex.htmlファイルには、Java ファイルへのリンクを提供する必要があります。そうしwgetないと、ダウンロードが必要であると認識されません。現在のディレクトリ構造についてfile2.htmlは、java ファイルへのリンクが含まれていることを確認してください。現在のディレクトリの上のディレクトリにリンクするようにフォーマットします。

<a href="../test/root/A/A1/file1.java">JavaFile</a>

ただし、機密性が低く、日常​​的にこれを行う場合は、ディレクトリにファイルを配置してリンクするfile1.javaコードが少なくて済みます。index.htmlroot

<a href="/A/A1/file1.java">JavaFile</a>

Java ファイルのみが必要で、HTML を無視したい場合は、次のように使用できます--reject

wget  -r -nH --reject="file2.html"
### Or to reject ALL html files ###
wget -r -nH --reject="*.html"

これは、指定したポイントから始まるすべてのディレクトリを再帰的に ( -r) 通過します。

2. 尊重するrobots.txt

/robots.txtディレクトリにファイルがある場合、*/root/*クロールが妨げられないことを確認してください。その場合は、コマンドwgetで次のオプションを追加して、無視するように指示する必要があります。wget

wget ... -e robots=off http://test/root

3. リモート リンクをローカル ファイルに変換します。

さらに、リンクをダウンロードしたファイルに変換するように指示wgetする必要があります。上記のすべてを正しく行った場合は、ここで問題ないはずです。すべてのファイルを取得する最も簡単な方法は、非パブリック ディレクトリの背後に何も隠されていなければ、次のコマンドを使用することです。mirror

これを試して:

wget -mpEk http://text/root/

# If robots.txt is present:

wget -mpEk robots=off http://text/root/

最大再帰深度がなく、すべてのアセットをダウンロードするため、-m代わりに使用することをお勧めします。-rミラーは、サイトの完全な深さを判断するのに非常に優れていますが、多くの外部リンクがある場合、サイト以外のものをダウンロードすることになる可能性があるため、-p -E -k. ページを作成するためのすべての前提条件ファイルと、保存されたディレクトリ構造が出力されます。-kリンクをローカル ファイルに変換します。リンクを設定する必要があるため、ディレクトリfile1.java内を取得する必要があります。ただし、このコマンドは、または../A1/内のJavaファイルへの特定のリンクが配置されていなくても、そのまま機能するはずですが、ディレクトリの残りの部分を保持するため、問題はありません。ミラー モードは、ディレクトリ構造として設定されたディレクトリ構造でも機能します。index.htmlfile2.htmlftp://また。

一般的な経験則:

ミラーリングしているサイトの側によっては、サーバーに多くの呼び出しを送信しています。ブラックリストに登録されたり、遮断されたりするのを防ぐために、waitオプションを使用してダウンロードをレート制限してください。投稿した側のサイトである場合は、その必要はありませんが、ミラーリングしている大規模なサイトでは、それを使用する必要があります。

wget -mpEk --no-parent robots=off --random-wait http://text/root/
于 2021-09-02T05:02:55.837 に答える