web-dev-qa-db-ja.com

Wgetを使用してサイトを再帰的にクロールし、画像をダウンロードする

Webサイトを再帰的にクロールし、特定の種類の画像のみをダウンロードするようにwgetにどのように指示しますか?

これを使用してサイトをクロールし、Jpeg画像のみをダウンロードしてみました。

wget --no-parent --wait=10 --limit-rate=100K --recursive --accept=jpg,jpeg --no-directories http://somedomain/images/page1.html

ただし、page1.htmlにはサブページへの数百のリンクが含まれ、それらには画像への直接リンクがありますが、wgetは「拒否されるはずのsubpage13.htmlを削除する」などのことを報告し、直接リンクされている画像がないため、画像をダウンロードしません。開始ページから。

これは、-acceptを使用してコンテンツをダウンロードするようにクロールとフィルタリングの両方を行うために使用されているのに対し、コンテンツのダウンロードを指示するためにのみ使用するためです。 wgetにすべてのリンクをクロールさせ、*。jpegなどの特定の拡張子を持つファイルのみをダウンロードさせるにはどうすればよいですか?

編集:また、一部のページは動的であり、CGIスクリプト(img.cgi?fo9s0f989wefw90eなど)を介して生成されます。受け入れリストにcgiを追加しても(たとえば--accept = jpg、jpeg、html、cgi)、これらは常に拒否されます。これを回避する方法はありますか?

13
Cerin

wget -A jpg,jpeg -r http://example.comを使ってみませんか?

5
meoninterwebz

ダウンロードが許可されていない場合、wgetがsubpage13.htmlのコンテンツ(およびリンク先のjpg)を知っていることをどのように期待しますか。 htmlを許可し、必要なものを取得して、不要なものを削除することをお勧めします。


あなたのcgiが拒否されている理由がよくわかりません... wgetによるエラー出力はありますか?おそらくwget verbose(-v)参照してください。別の質問としては最適かもしれません。

とはいえ、帯域幅とダウンロードロットを気にしない場合は、後で不要なものを削除してもかまいません。


また、--html-extension

Manページから:

-E

--html-extension

タイプがapplication/xhtml + xmlまたはtext/htmlのファイルがダウンロードされ、URLがregexp。[Hh] [Tt] [Mm] [Ll]?で終わっていない場合、このオプションは.htmlのサフィックスをローカルファイル名に追加されます。これは、たとえば、.aspページを使用するリモートサイトをミラーリングしているときに、ミラーリングされたページを在庫のApacheサーバーで表示できるようにする場合に便利です。これのもう1つの有効な使用法は、CGIが生成した資料をダウンロードする場合です。 http://site.com/article.cgi?25 のようなURLは、article.cgi?25.htmlとして保存されます。

この方法で変更されたファイル名は、サイトを再ミラーリングするたびに再ダウンロードされます。WgetはローカルX.htmlファイルがリモートURL Xに対応していることを認識できないためです(URLがタイプの出力を生成することをまだ認識していないため) text/htmlまたはapplication/xhtml + xml。この再ダウンロードを防ぐには、-kおよび-Kを使用して、ファイルの元のバージョンがX.origとして保存されるようにする必要があります。


--restrict-file-names=unixもそれらのcgiのURLのために役立つかもしれません...

1
Pricey

プログラミングせずにMetaProducts Offline Explorerを使用することもできます

0
TiansHUo