Tips in Action‎ > ‎문자열‎ > ‎

HTML 파일 목록만들기- <TITLE>추출

전종필

많은 HTML 파일들을 다루어야 하는 웹 관리자에게 도움이 될 수 있는 내용입니다.
HTML 파일들의 목록을 각 파일의 제목을 사용하여 만들려면, 다음 내용을 응용하시면 됩니다. 간단하지만, 목록을 index 파일로 만들거나, 데이터베이스에 넣어서 관리하거나 할 때 사용하십시오.

#!/usr/bin/perl
# filename : htmllist.pl

while( $file = shift @ARGV ) {
        unless( $file =~ /\.html?$/i ) { # HTML이 아니면 사양
                warn "$file is not an HTML file.\n";
                next;
        }
        unless( open FH, $file ) {
        	warn "Could not read $file : $!\n";
        	next;
        }
        while( <FH> ) {
                if( m|<title>(.+)</title>|i ) { # <TITLE> 태그가 있나?
                        print "$file : $1\n"; # 태그가 있다면 첫째 괄호 (.+)내용은 $1에 있으므로..
                        last;
                }
        }
        close FH;
}
위 스크립트는 스크립트의 인수로 넘겨받은 파일들 중에서 HTML 파일만을 읽고, 그 중에서 <TITLE>...</TITLE> 태그 안에 있는 내용을 파일 이름과 함께 출력합니다.
아마, 더 이상의 설명은 필요없을 듯 합니다.
여러분이 바꿔서 응용할 부분은 대개 print "$file : $1\n"; 부분일 것입니다. 이 부분을 HTML 태그나 SQL문으로 바꿔서 출력하거나, 다른 배열, 혹은 변수로 저장한 후 약간의 처리과정을 거쳐서 파일 혹은 데이터베이스에 저장하는 것으로도 간단하게 파일 목록을 작성할 수 있습니다. 위의 while( $file = shift @ARGV ) 부분을 while( <> )로 바꿔서 할 수 있을 것이라고 생각하시는 분은 좀 더 짧아보이는 다음 내용을 참조하십시오.

$file = $ARGV[0];
while(<>) {
        unless( $file =~ /\.html?$/i ) { # HTML이 아니면 사양
                warn "$file is not an HTML file.\n";
                close ARGV;
                $file = $ARGV[0];
                next;
        }
        if( m|<title>(.+)</title>|i ) { # <TITLE> 태그가 있나?
                print "$file : $1\n"; # 태그가 있다면 첫째 괄호 (.+)내용은 $1에 있으므로..
                close ARGV;
        }
        $file = $ARGV[0] if eof; # eof()와 eof는 다르게 동작합니다.
}
출력 내용은 같지만, 왜 그렇게 될지는 한 번 생각해 보세요 ;-) 
Comments