コマンドライン ユーティリティを使用して、参照されているすべての画像、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
、マークアップや構造なしですべてを 1 つのファイルに出力します。ほとんどの場合、これはあまり役に立ちませんが、サイズだけを知りたい場合は十分です。
wget -p -H 'http://www.example.com/' -O tempfile
wc -c < tempfile