2013-09-13 3 views
1

Я разбираю HTML-файл с HTML::TokeParser::Simple. Файл HTML имеет контент, показанный ниже. Моя проблема заключается в том, что я пытаюсь игнорировать JavaScript в качестве текстового содержимого. Пример:HTML-анализ с помощью HTML :: TokeParser :: Simple

use HTML::TokeParser::Simple; 
my $p = HTML::TokeParser::Simple->new('test.html'); 

while (my $token = $p->get_token) { 
    next unless $token->is_text; 
    print $token->as_is, "\n"; 
} 

Это печатает вывод, как показано ниже:

Test HTML 

<!-- 
    var form_submitted = 0; 

    function submit_form() { 
    [..] 
    } 
//--> 

Фактическое содержание документа HTML:

<html> 
<span>Test HTML</span> 
<script type="text/javascript"> 
<!-- 
    var form_submitted = 0; 

    function submit_form() { 
    [..] 
    } 
//--> 
</script> 
</html> 

Как игнорировать JavaScript содержимое тегов от показа.

ответ

0

Сканирование через токен, чтобы игнорировать все открытые и закрытые теги скриптов. См. Ниже, как используется для решения проблемы.

my $ignore=0; 

    while (my $token = $p->get_token) { 

     if ($token->is_start_tag('script')) { 
     print $token->as_is, "\n"; 
     $ignore = 1; 
     next; 
     } 
     if ($token->is_end_tag('script')) { 
     $ignore = 0; 
     print $token->as_is, "\n"; 
     next; 
     } 
     if ($ignore) { 
     #Everything inside the script tag. Here you can ignore or print as is 
     print $token->as_is, "\n"; 
     } 
     else 
     { 
      #Everything excluding scripts falls here handle as appropriate 
      next unless $token->is_text; 
      print $token->as_is, "\n"; 
     } 
    } 
1

Я получаю желаемый результат. Комментарии (правильно) не рассматриваются текстом версии, которую я имею. Похоже, вам нужно обновить модули, которые вы используете. (Я использовал HTML :: Parser 3.69 и HTML :: TokeParser :: Simple 3.15.)

>perl a.pl 
Test HTML 



> 

Вы должны будете все еще обрабатывать HTML сущности и форматирование текста полезно, причем последний довольно сложно, так как вы удалили все инструкции по форматированию. Ваш подход кажется смертельно ошибочным.

0

Я считаю, что вам нужно использовать только метод as_text.

my $tree = HTML::TreeBuilder->new(); 
    $tree->parse($html); 
    $tree->eof(); 
    $tree->elementify(); # just for safety 
    my $text = $tree->as_text(); 
    $tree->delete; 

Я приспособил это от WWW :: Механизируйте модуль (http://search.cpan.org/dist/WWW-Mechanize/), который имеет тонн удобных методов, которые могут помочь вам. Он в основном действует как веб-браузер в объекте.

Смежные вопросы