参照されたコンテンツを含むURLのサイズを取得します。

参照されたコンテンツを含むURLのサイズを取得します。

コマンドラインユーティリティで参照されているすべての画像、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

関連情報