コマンドラインユーティリティで参照されているすべての画像、CSS、およびJavaScriptファイルを含むURLのバイトサイズ(ページがブラウザに完全にロードされる前に一般訪問者が受け取る必要があるバイト数)を取得するための推奨方法はありますか? (仮想)次のようになります。
wget --output-format=mozilla-archive-format --with-referenced-content --compression=0 \
'http://www.example.com/' > temp.maff && stat -c%s temp.mapp ; rm temp.maff
私はスクリプトによって動的に生成され、ロードされた参照を含まないなどの制限に同意します。基本的な情報だけを見ると、15,000バイトのHTMLページに3,985,000バイトの画像が含まれている場合は、4,000,000を取得することを検討する価値があります。現在、非常に基本的なタスクを実行するPerlスクリプトがあります。
#!/usr/bin/perl
use URI;
$html = `wget -qO - '$ARGV[0]'`;
$sum = length($html);
while($html =~ /\bsrc="(.*?)"/g){
$url = URI->new_abs($1, $ARGV[0]);
$head = `curl -I --silent '$url'`;
if($head =~ /Content-Length: ?(\d+)/){
$size = scalar($1);
}else{
$size = length(`wget -qO - '$url'`);
}
$sum += $size;
}
print "$sum\n";
しかし、ここには多くの欠点があります。最初のレベルのリンクだけが追跡され、スクリプト評価はありません…成熟したツールを使用する1行などのより良いアプローチは大いに感謝します。
答え1
関連wget
オプションは-p
/--page-requisites
:
このオプションを使用すると、Wgetは指定されたHTMLページを正しく表示するために必要なすべてのファイルをダウンロードします。これには、インライン画像、サウンド、参照スタイルシートなどが含まれます。
-H
--span-hosts
ページが他のウェブサイト(gravatar、google API)のコンテンツを使用している場合でも、/を使用することをお勧めします。
-O
/は--output-document
マークアップや構造なしですべて単一のファイルとして出力します。ほとんどの場合、これはあまり役に立ちませんが、サイズだけを知りたい場合はこれで十分です。
wget -p -H 'http://www.example.com/' -O tempfile
wc -c < tempfile