Obtendo o tamanho de um URL com conteúdo referenciado

Obtendo o tamanho de um URL com conteúdo referenciado

Existe uma maneira recomendável de obter o tamanho em 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 utilitários de linha de comando? 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

Eu concordaria com limitações como não incluir referências que são geradas dinamicamente e carregadas por scripts,…. Apenas as informações básicas, obter 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 dar uma olhada. Atualmente tenho um script Perl fazendo o 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, sem avaliação de script,…. Qualquer abordagem melhor, talvez uma linha usando ferramentas maduras, seria apreciada.

Responder1

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

Esta opção faz com que o Wget baixe todos os arquivos necessários para exibir corretamente uma determinada página HTML. Isso inclui coisas como imagens embutidas, sons e folhas de estilo referenciadas.

-H/ --span-hoststambém é recomendado se a página usar algo de outro site (gravatar, APIs do Google).

-O/ --output-documentirá gerar tudo em um único arquivo, sem qualquer marcação ou estrutura. Isso não é muito útil na maioria das vezes, mas é suficiente se você precisar apenas saber seu tamanho.

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

informação relacionada