web-dev-qa-db-ja.com

一部のWebサイトでwgetがindex.htmlのみをダウンロードするのはなぜですか?

私はwgetコマンドを使用しようとしています:

wget -p http://www.example.com 

メインページ上のすべてのファイルを取得します。一部のWebサイトでは機能しますが、ほとんどの場合、index.htmlのみをダウンロードします。 wget -rコマンドを試しましたが、機能しません。ページ上のすべてのファイルを取得する方法を知っている人、または単にページ上のファイルと対応するURLのリストを教えてくれますか?

42
Jay H

WgetはWebサイト全体をダウンロードすることもできます。ただし、これによりサーバーに大きな負荷がかかる可能性があるため、wgetはrobots.txtファイルに従います。

 wget -r -p http://www.example.com

-pパラメーターは、イメージを含むすべてのファイルを含めるようにwgetに指示します。これは、すべてのHTMLファイルがどのように見えるべきかを示すことを意味します。

それでは、wgetにrobots.txtファイルを従わせたくない場合はどうでしょうか?次のように、コマンドに-e robots = offを追加するだけです。

 wget -r -p -e robots=off http://www.example.com

多くのサイトではサイト全体をダウンロードできないため、ブラウザの身元を確認します。これを回避するには、上で説明したように-U mozillaを使用します。

 wget -r -p -e robots=off -U mozilla http://www.example.com

多くのウェブサイト所有者は、サイト全体をダウンロードしているという事実を好まないでしょう。サーバーは、大量のファイルをダウンロードしていることを認識すると、自動的にブラックリストに追加します。これを回避する方法は、ダウンロードするたびに数秒待つことです。 wgetを使用してこれを行う方法は、-wait = Xを含めることです(Xは秒数です)。

パラメーター:--random-waitを使用して、wgetが待機する秒数をランダムに選択できるようにすることもできます。これをコマンドに含めるには:

wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
83
Ritesh Chandora

まず、質問を明確にするために、index.htmlに加えて、そのページのすべての必要な部分(画像など)をダウンロードすることを目的としています。 -pオプションは--page-requisitesと同等です。

ページの必要条件が常にダウンロードされるとは限らないのは、多くの場合、元のページとは異なるドメイン(CDNなど)でホストされているためです。デフォルトでは、 wgetは他のホストへのアクセスを拒否します であるため、--span-hostsオプションでホストスパニングを有効にするが必要です。

wget --page-requisites --span-hosts 'http://www.Amazon.com/'

index.htmlをロードし、すべてのページ要件をローカルバージョンからロードできるようにする必要がある場合は、--convert-linksオプションを追加して、img src属性のURLを追加する必要があります。 (たとえば)ローカルバージョンを指す相対URLに書き換えられます。

オプションで、--no-Host-directoriesオプションを追加してすべてのファイルを単一の「ホスト」ディレクトリに保存するか、--no-directoriesオプションを追加してすべてのファイルを単一のフラットディレクトリに保存することもできます。

--no-directoriesを使用すると、多くのファイルが現在のディレクトリにダウンロードされるため、--directory-prefixを使用して、出力ファイルのフォルダー名を指定することをお勧めします。

wget --page-requisites --span-hosts --convert-links --no-directories --directory-prefix=output 'http://www.Amazon.com/'
32
Alf Eaton

指定したリンクはホームページまたは/index.htmlです。したがって、index.htmlページのみを取得していることは明らかです。実際のダウンロード、たとえば「test.Zip」ファイルの場合、最後に正確なファイル名を追加する必要があります。たとえば、次のリンクを使用してtest.Zipファイルをダウンロードします。

wget -p domainname.com/test.Zip

wget --mirrorを使用して完全なWebサイトをダウンロードする

以下は、完全なWebサイトをダウンロードしてローカルで表示できるようにする場合に実行するコマンドラインです。

wget --mirror -p --convert-links -P ./LOCAL-DIR http://www.example.com

  • -mirror:ミラーリングに適したオプションをオンにします。

  • -p:特定のHTMLページを適切に表示するために必要なすべてのファイルをダウンロードします。

  • -convert-links:ダウンロード後、ドキュメント内のリンクをローカル表示用に変換します。

  • -P ./LOCAL-DIR:すべてのファイルとディレクトリを指定したディレクトリに保存します

wget -r -Aを使用して特定のファイルタイプのみをダウンロードする

これは次の状況で使用できます。

  • ウェブサイトからすべての画像をダウンロードし、

  • Webサイトからすべてのビデオをダウンロードし、

  • WebサイトからすべてのPDFファイルをダウンロード

wget -r -A.pdf http://example.com/test.pdf

6
Athul AK

もう1つの問題は、ミラーリングしているサイトがwwwなしのリンクを使用していることです。あなたが指定した場合

wget -p -r http://www.example.com

リンクされた(インターン)ページは「異なる」ドメインからのものであるため、ダウンロードされません。その場合は、次を使用します

wget -p -r http://example.com

代わりに(wwwなし)。

4
jor

私はこのスレッドが古いことを知っていますが、リテッシュが言及していることを試してください:

--no-cookies

それは私のために働いた!

3
Joshua

CFSv2モデルのファイルのダウンロードでも同じ問題が発生しました。上記の回答を混合して解決しましたが、パラメータ--no-check-certificateを追加しました

wget -nH --cut-dirs=2 -p -e robots=off --random-wait -c -r -l 1 -A "flxf*.grb2" -U Mozilla --no-check-certificate https://nomads.ncdc.noaa.gov/modeldata/cfsv2_forecast_6-hourly_9mon_flxf/2018/201801/20180101/2018010100/

ここでは、使用されるすべてのパラメーターの簡単な説明があります。詳細については、 GNU wget 1.2 Manual

  • -nHと同等の--no-Host-directories:ホスト接頭辞付きディレクトリの生成を無効にします。この場合、ディレクトリ./https://nomads.ncdc.noaa.gov/の生成を避けてください

  • --cut-dirs=<number>:ディレクトリコンポーネントを無視します。この場合、ディレクトリ./modeldata/cfsv2_forecast_6-hourly_9mon_flxf/の生成を避けてください

  • -pと同等の--page-requisites:このオプションにより、Wgetは、特定のHTMLページを適切に表示するために必要なすべてのファイルをダウンロードします。これには、インライン画像、サウンド、参照スタイルシートなどが含まれます。

  • -e robots=off:robots.txtファイルのダウンロードを避ける

  • -random-wait--waitオプションを使用して指定された場合、リクエスト間の時間が0.5〜1.5 *秒の間で変化します。

  • -c--continueと同等:部分的にダウンロードされたファイルの取得を続けます。

  • -rと同等の--recursive:再帰的取得を有効にします。デフォルトの最大深度は5です

  • -l <depth>--level <depth>と同等:再帰の最大深度レベルを指定します

  • -A <acclist>と同等の--accept <acclist>:受け入れる名前のサフィックスまたはパターンのコンマ区切りリストを指定します。

  • -U <agent-string>と同等の--user-agent=<agent-string>:HTTPプロトコルにより、クライアントはUser-Agentヘッダーフィールドを使用して自身を識別できます。これにより、通常統計目的またはプロトコル違反のトレースのために、WWWソフトウェアを区別できます。 Wgetは通常、Wgetの現在のバージョン番号であるバージョンを「Wget/version」として識別します。

  • --no-check-certificate:サーバー証明書を利用可能な認証局と照合しないでください。

0
cmcuervol

wget manualindex.htmlを探すと、オプション--default-page=nameを見つけることができますindex.htmlデフォルトでは。たとえば、index.phpに変更できます。

--default-page=index.php
0
adrianTNT

index.htmlのみを取得し、そのファイルがバイナリデータのみを含むように見える場合(つまり、読み取り可能なテキストはなく、制御文字のみ)、サイトはおそらくgzip圧縮を使用してデータを送信しています。

これを確認するには、cat index.html | gunzipを実行して、読み取り可能なHTMLを出力するかどうかを確認します。

この場合、wgetの再帰機能(-r)は機能しません。 wgetがgzip圧縮データを処理するための パッチ がありますが、まだ標準リリースには含まれていないようです。

0
Silveri