取得包含引用內容的 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

相關內容