2012-06-20 7 views
30

私はwgetのコマンドを使用しようとしています。一部のWebサイトでは動作しますが、ほとんどの場合、index.htmlのみをダウンロードします。私はwget -rコマンドを試しましたが、動作しません。どのようにページ上のすべてのファイルをフェッチするか、またはファイルと対応するURLのリストをページに表示する方法はわかっていますか?なぜwgetはindex.htmlをダウンロードするWebサイトがいくつかありますか?</p> <pre><code>wget -p http://www.example.com </code></pre> <p>は、メインページ上のすべてのファイルを取得するために:

+1

URLの例はありますか? – Fabien

+0

これはあなたの[前の質問]とどのように違うのですか(http://stackoverflow.com/questions/11123477/how-to-get-a-list-of-all-paths-files-on-a-webpage-using- wget-or-curl-in-php)?それが同じ問題ならば、それを明確にするためにあなたの古い質問を編集してください。 –

+0

[wgetまたはcurlを使用してWebページ上のすべてのパス/ファイルのリストをphpで取得する方法](https://stackoverflow.com/questions/11123477/how-to-get-a-list-of) -all-paths-files-on-a-webpage-wget-or-curl-in-phpを使用して) –

答えて

63

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

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

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

robots.txtファイルでwgetを服従させたくない場合はどうすればよいですか?あなたは、単にこのようなコマンドを切っ= -eロボットを追加することができます。

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 --random-wait -r -p -e robots=off -U mozilla http://www.example.com 
+3

あなたの答えをありがとう。私はあなたがいくつかの一般的なURL(例えばamazon.com)で言及した3つの方法を試しましたが、私が得るのはindex.htmlだけでした。他の提案はありますか? –

+3

ここに同じ。 index.html – BigSack

+3

@JayHリダイレクトされるアドレスは使用しないでください。 IEの場合は '' 'http:// amazon.com'''を使うと動作しません。なぜならあなたはwww.amazon.comにリダイレクトされるでしょうが、' '' http://www.amazon .com''それはすべてのサイトをダウンロードし始めるでしょう。 ロボットのファイルに従わないことは、 "礼儀正しい"ものではないので、想像以上にうまくいくわけではありません。 –

0

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

--default-page=index.php 
2

私はこのスレッドが古いであることを知っているが、とRiteshで言及されているものを試してください:それは私のために働い--no-クッキー

4

あなたが提供したリンクはホームページまたは/index.htmlです。したがって、index.htmlページのみを取得していることは明らかです。例えば ​​"test.zip"ファイルのような実際のダウンロードでは、最後に正確なファイル名を追加する必要があります。たとえば、次のリンクを使用してtest.zipファイルをダウンロードしてください。

wget -p domainname.com/testあなたは完全なウェブサイトをダウンロードしたいときに実行するコマンドラインで、局所的な視聴のために利用できるように続きwget --mirror

を使用した全ウェブサイトをダウンロード

を圧縮します。

のwget --mirror -p --convertリンク-P ./LOCAL-DIR http://www.example.com

  • -mirror:ミラーリングに適したオプションをオンにしてください。

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

  • -convert-links:ダウンロード後、ローカルの表示用に のリンクを変換してください。

  • -P ./LOCAL-DIR:指定したディレクトリにすべてのファイルとディレクトリにあなたは次のような状況の下で、これを使用することができwget -r -A

    を使用して

ダウンロードのみ特定の種類のファイルを保存します:

  • すべての画像をWebサイトからダウンロードしてください:

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

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

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

まず
+1

ありがとうございます。 '--mirror'オプションは最終的に私のために働かせました。 – vergenzt

+0

あなたはいつもようこそ@vergenzt :) –

25

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

ページの要件が必ずしもダウンロードされないのは、元のページ(CDNなど)とは異なるドメインでホストされることが多いからです。デフォルトではwget refuses to visit other hostsなので--span-hostsオプションでホストスパニングを有効にする必要があります。

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

あなたがindex.htmlをロードし、ローカルバージョンからのすべてのページの必需品の負荷を持ってできるようにする必要がある場合(例えば)imgのsrc属性内のURLがあるように、あなたは、--convert-linksオプションを追加する必要がありますがローカルバージョンを指す相対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/' 
+0

貴重な答えをありがとう。私があなたに賞金を授与する前に、もっと一般的な情報を追加してください。たとえば、このリンクの下にある 'http:// indiabix.com/civil-engineering/questions-and-answers /'のように、wgetが各カテゴリ/章を訪れ、すべてのセクションをすべてのページからダウンロードするようにします(左側のサイドバーにあります)。画像では、質問に関係する数式の画像を含むすべての画像を意味することに注意してください。 * index.htmlのダウンロード後にダウンロードが停止する問題があります。 * –

+0

@InsaneCoder再帰的なフェッチは他の一連の問題ですので、別の質問をして試してみてください。(私が理解しているようにそれは)オリジナルの質問が何を求めていたかではありません。 –

+0

@InsaneCoder '--mirror'オプションを追加するのは最も簡単で、必要に応じて十分です。 –

3

もう1つの問題は、ミラーリングしているサイトがwwwなしのリンクを使用している可能性があります。あなたは

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

を指定した場合、彼らは「異なる」ドメインからなので、だから、任意のリンク(インターン)のページをダウンロードしないであろう。この場合、次に(wwwせず)の代わり

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

を使用します。

+0

正しい観察。これが私の問題の根本的な原因です。 –

0

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

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

この場合、wgetの再帰機能(-r)は機能しません。 gzip圧縮データを扱うにはwgetpatchがありますが、まだ標準リリースには含まれていません。

関連する問題

 関連する問題