24

wget を使用して作業中の Web ページを取得しようとしていますが、これは次のコマンドを使用してほとんどのサイトでうまくいきます。

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

これらの場合、index.html と必要な CSS/JS などで終わります。

ただし、特定の状況では、URL にクエリ文字列が含まれ、そのような場合、クエリ文字列が追加された index.html が取得されます。

www.onlinetechvision.com/?p=566

上記の wget コマンドと組み合わせると、次のようになります。

index.html?page=566

--restrict-file-names=windows オプションを使用してみましたが、それだけでは

index.html@page=566

これが必要な理由と、通常の index.html ファイルで終わる方法を誰かが説明できますか?

更新: 私は、別のアプローチを取ることについて、一種のフェンスにいます。出力を解析することで、wget が保存する最初のファイル名を取得できることがわかりました。したがって、保存先: の後に表示される名前が必要な名前です。

しかし、これはこの奇妙な文字によってラップされています - ハードコーディングされたものを単に削除するのではなく - これはどこから来たのでしょうか?

4

5 に答える 5

1

これが必要な理由についての質問に答えるために、Web サーバーはクエリ文字列のパラメーターに基づいて異なる結果を返す可能性が高いことに注意してください。のクエリが とindex.html?page=52は異なる結果を返す場合、index.html?page=53おそらく両方のページを同じファイルに保存したくないでしょう。

異なるクエリ パラメータのセットを使用する各 HTTP リクエストは、文字通り、個別のリソースに対するリクエストです。wget は、これらの変更のどれが重要であり、重要でないかを予測できないため、保守的な方法でローカル ドキュメントのファイル名にクエリ パラメーターの URL を保存しています。

于 2015-11-05T05:24:39.303 に答える
0

私の解決策は、wget の外で再帰的なクロールを行うことです。

  1. wget でディレクトリ構造を取得 (ファイルなし)
  2. 各ディレクトリからメイン エントリ ファイル (index.html) を取得するためのループ

これはワードプレスサイトでうまく機能します。一部のページを見逃す可能性があります。

#!/bin/bash

#
# get directory structure
#
wget --spider -r --no-parent  http://<site>/

#
# loop through each dir
#
find . -mindepth 1 -maxdepth 10 -type d | cut -c 3- > ./dir_list.txt

while read line;do
        wget --wait=5  --tries=20 --page-requisites --html-extension --convert-links --execute=robots=off --domain=<domain> --strict-comments http://${line}/

done < ./dir_list.txt
于 2015-03-17T13:57:41.607 に答える
-2

-O または --output-document オプションを使用します。http://www.electrictoolbox.com/wget-save-different-filename/を参照してください。

于 2013-11-08T17:28:03.343 に答える