获取包含引用内容的 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

相关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

相关内容