Obtener el tamaño de una URL con contenido referenciado

Obtener el tamaño de una URL con contenido referenciado

¿Existe alguna forma recomendable de obtener el tamaño en bytes de una URL con todas las imágenes a las que se hace referencia, archivos CSS y javascript (la cantidad de bytes que un visitante normal debe recibir antes de que la página se haya cargado completamente en el navegador) mediante utilidades de línea de comandos? Algo como (ficticio):

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

Estoy de acuerdo con limitaciones como no incluir referencias generadas y cargadas dinámicamente mediante scripts,…. Ya valdría la pena mirar solo la información básica, obtener 4.000.000 cuando hay una página HTML de 15.000 bytes con una imagen de 3.985.000 bytes. Actualmente tengo un script en Perl que hace lo más 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";

Sin embargo, esto tiene muchos inconvenientes. Sólo se sigue un nivel de enlaces, no hay evaluación del guión,…. Se agradecería cualquier enfoque mejor, tal vez una frase ingeniosa que utilice herramientas maduras.

Respuesta1

La wgetopción relevante es-p/--page-requisites:

Esta opción hace que Wget descargue todos los archivos necesarios para mostrar correctamente una página HTML determinada. Esto incluye elementos como imágenes integradas, sonidos y hojas de estilo a las que se hace referencia.

-H/ --span-hoststambién se recomienda si la página utiliza algo de otro sitio (gravatar, API de Google).

-O/ --output-documentlo generará todo en un solo archivo, sin ningún marcado ni estructura. Esto no es muy útil la mayor parte del tiempo, pero es suficiente si sólo necesitas saber su tamaño.

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

información relacionada