Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Michael Savin                        2:5070/269     23 Oct 2001  20:31:22
 To : all
 Subject : HTML Parsing
 -------------------------------------------------------------------------------- 
 
 
 Подскажите как можно корректно перевести HTML-файл в текстовой. Я тут наваял
 простенькую вещь, но она корректно работает только для квазитекстового html-я.
 Хотелось перевести Programming Perl из пачки html-ек в один txt-файл... В общем,
 более-менее получилось, но...
 
 Ах да. У меня обрабатывается только информация из
 <div class="sect1"> ... </div>, которая в кождой html - одна. Это, кстати, тоже 
 бага... :-)
 -+- h2t.pl----------------------------------------------------------
 package MyParser;
 use HTML::Parser;
 use HTML::Entities qw(decode_entities);
 @ISA = qw(HTML::Parser);
 my $textfl=0;
 
 sub text {
     my($self, $text) = @_;
     if ($textfl) {
        print decode_entities($text);
     }
 }
 
 sub start {
        my($self, $tagname, $attr, $attrseq, $origtext) = @_;
        if ($textfl) {
           print "\n" if ($tagname eq "p");
           print "\n" if ($tagname eq "pre");
        }
        if ($tagname eq "div") {
           if ($origtext=~/"sect1"/) {$textfl++};
        }
 }
 sub end {
        my($self, $tagname, $origtext) = @_;
        print "\n" if ($tagname eq "p");
        if ($tagname eq "div") {print "\n";$textfl-- if ($textfl)}
 }
 
 package main;
 $p=MyParser->new;
 my (@files);
 foreach $file (<*.htm>) {
         $outfile=(split(/\./,$file))[0] . ".txt";
         push (@files,$outfile);
         open FILE,">$outfile";
         select FILE;
     $p->parse_file($file);
         select STDOUT;
         print "File $file parsed.\n";
         close FILE;
 }
 
 # лечим файлы от лишних пустых строчек сверху и снизу.
 foreach $file (@files) {
   open FILE, "<$file";
   @filedata=<FILE>;
   while (!($filedata[0]=~/^\S/)){defined(filedata[0]) or last;shift @filedata};
   while (!($filedata[-1]=~/^\S/)){defined(filedata[-1]) or last;pop @filedata};
   open FILE, ">$file";
   print FILE @filedata;
   close FILE;
   print "File $file fixed.\n";
 }
 #sunshine on the grave#
 --- asmъmetallicaъadomъforest sysops
  * Origin: depression feeling (2:5070/269)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 HTML Parsing   Michael Savin   23 Oct 2001 20:31:22 
Архивное /ru.perl/23453bd5d64c.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional