Разбор HTML с Perl избавиться от встроенных стилей CSS - PullRequest
0 голосов
/ 25 января 2019

У меня есть этот файл, который я получаю от wget.

casperadm@casper:~> cat /tmp/one
<html>
<head>
<style>
a{text-decoration:none}
a:link{color:024C7E}
a:visited{color:024C7E}
a:active{color:958600}
body{font:10pt verdana;text-align:justify}
</style>
</head>
<body>
<pre>
x
-----
casper foo text
</body>
</html>

и затем я создал очень простой анализ HTML в Perl

#!/usr/bin/perl -w
use warnings ;
use strict;

package HTMLStrip;
use base "HTML::Parser";

  subtext {
     my ($self, $text) = @_;
     print $text;
  }

  my $p = new HTMLStrip;
  # parse line-by-line, rather than the whole file at once
  while (<>) {
      $p->parse($_);
  }
 # flush and parse remaining unparsed HTML
  $p->eof;

Синтаксический анализ работает нормально, однако, кажется, он игнорирует встроенные стили, которые были неожиданной ошибкой, и портит мои коллекции старых веб-страниц, с которых мне приходится получать данные. Любые идеи о том, как избавиться от гладких встроенных стилей CSS?

casperadm@casper:~> /tmp/pleaseParse /tmp/one
a{text-decoration:none}a:link{color:024C7E}a:visited{color:024C7E}a:active{color:958600}body{font:10pt verdana;text-align:justify}
x
-----
casper foo text

1 Ответ

0 голосов
/ 25 января 2019

Использование HTML::TreeBuilder из HTML :: Tree :

#!/usr/bin/perl
use strict;
use warnings;

use HTML::TreeBuilder;
my $parser = HTML::TreeBuilder->new()
    or die "can't create parser\n";

my $root = $parser->parse_file(\*DATA)
    or die "can't parse HTML\n";

#$root->dump();
my $style = $root->look_down(_tag => 'style')
    or die "can't find <style>!\n";

$style->dump();

# IMPORTANT: needs to be deleted() if you continue your code!
$root->delete();

exit 0;

__DATA__
<html>
<head>
<style>
a{text-decoration:none}
a:link{color:024C7E}
a:visited{color:024C7E}
a:active{color:958600}
body{font:10pt verdana;text-align:justify}
</style>
</head>
<body>
<pre>
x
-----
casper foo text
</body>
</html>

Выход:

$ perl dummy.pl
<style> @0.0.0
  "\x0aa{text-decoration:none}\x0aa:link{color:024C7E}\x0aa:visited{color:024..."

Используйте методы HTML :: Element для манипулирования узлом DOM *, на который указывает $style.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...