在perl中删除特定的html标签

我有一个存储在磁盘上的html文件(该文件是)。我想删除图像的所有html标签。这是我到目前为止所尝试过的。

#!/usr/bin/perl -w
use HTML::TagFilter;
my $tf = new HTML::TagFilter;

open READ, "D:\\Scripts\\file.html" or die "Couldn't open file: $!"; 
$string1 = join("", ); 
close READ;

my $self = HTML::TagFilter->new(deny => {img => {'all'}});
open (MYFILE, '>D:\\Scripts\\remove.html');
print MYFILE $tf->filter($string1);
close (MYFILE); 

如果我只是运行这个程序它打印

Odd number of elements in anonymous hash at remove everything else.pl line 9.
Parsing of undecoded UTF-8 will give garbage when decoding entities at C:/Perl64
/site/lib/HTML/TagFilter.pm line 499.

该文件被存储,但它没有删除图像标签(第9行是我应用过滤器的地方)。我在这里做错了什么。

1
额外 编辑
意见: 1
是。这样可行。但广告仍然显示。任何想法如何删除它们。另外我怎样才能在该页面上获得内容
额外 作者 user1092042,
错误说明了这一切: {'all'} 具有奇数个元素,因此不是有效的散列。将它替换为'all'{'all'=>'somevalue'}['all'] ,取决于它是否应该成为标量,哈希或数组。
额外 作者 flesk,
并将 use strict; 添加到脚本中。长远来看,你将从中受益。
额外 作者 flesk,

1 答案

首先,您应该在程序开始时始终 使用strict使用警告,特别是在寻求帮助解决该问题之前。

您已经创建了两个 HTML :: TagFilter 对象: $ tf 它没有过滤器, $ self 可以移除 </代码>元素。您已经使用 $ tf 来处理HTML,因此您的数据不会改变。

此代码适用于我提及的更正以及其他一些更正。

use strict;
use warnings;

use HTML::TagFilter;

my $tf = HTML::TagFilter->new(deny => {img => {all => []}});

my $html = do {
  open my $fh, 'D:\Scripts\file.html' or die "Couldn't open file: $!";
  local $/;
  <$fh>;
};

open my $out, '>', 'D:\Scripts\remove.html' or die "Unable to open output file: $!";
print $out $tf->filter($html);
2
额外
这有效,但你有一个想法如何删除广告,因为一些图像仍然保留。
额外 作者 user1092042,
所以没有办法将它们删除。
额外 作者 user1092042,
他正按照问题中包含的警告提示警告。尽管如此,我同意 use warningsw 标志更适合除shell之外的其他任何东西。
额外 作者 flesk,
只是看起来你暗示他不是,而且它使用 warnings 来产生他要求帮助的输出(即使这不是他唯一的问题)。
额外 作者 flesk,
@flesk:你的观点是什么?
额外 作者 Borodin,
好的,对不起,如果不明确。令我惊讶的是,很多人仍然使用-w当它与Unix系统以外的任何东西几乎毫不相干
额外 作者 Borodin,
有些广告是背景图片,例如 html#type-toyota-article-structured.template-toyota-article body一个div#brandscape 。这就是为什么你不能删除它们。我相信也有一些闪光元素。
额外 作者 simbabque,