Obtendo o tamanho de um URL com conteúdo referenciado

1

Existe uma maneira recomendável de obter o tamanho de bytes de uma URL com todas as imagens referenciadas, arquivos CSS e javascript (o número de bytes que um visitante normal deve receber antes que a página seja totalmente carregada no navegador) por meio de comando utilitários de linha? Algo como (fictício):

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

Gostaria de concordar com limitações como, não incluindo referências geradas dinamicamente e carregadas por scripts,…. Apenas a informação básica, obtendo 4.000.000 quando há uma página HTML de 15.000 bytes com uma imagem de 3.985.000 bytes, já valeria a pena ser olhada. Atualmente, tenho um script Perl fazendo o muito básico:

#!/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";

No entanto, isso tem muitas desvantagens. Apenas um nível de links sendo seguido, nenhuma avaliação de script,…. Qualquer abordagem melhor, talvez um one-liner usando ferramentas maduras, seria apreciada.

    
por Paramaeleon 20.05.2016 / 10:07

1 resposta

0

A opção wget relevante é -p / --page-requisites :

This option causes Wget to download all the files that are necessary to properly display a given HTML page. This includes such things as inlined images, sounds, and referenced stylesheets.

-H / --span-hosts também é recomendado se a página usar qualquer coisa de outro site (gravatar, google APIs).

-O / --output-document resultará em um único arquivo, sem nenhuma marcação ou estrutura. Isso não é muito útil na maior parte do tempo, mas é bom o suficiente se você só precisa saber seu tamanho.

wget -p -H 'http://www.example.com/' -O tempfile
wc -c < tempfile
    
por 20.05.2016 / 11:05