참조된 콘텐츠가 포함된 URL의 크기를 가져옵니다.

참조된 콘텐츠가 포함된 URL의 크기를 가져옵니다.

명령줄 유틸리티를 통해 참조된 모든 이미지, CSS 및 자바스크립트 파일이 포함된 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

관련 정보