Perl में विशिष्ट एचटीएमएल टैग को हटा रहा है

मेरे पास डिस्क पर संग्रहीत एक 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, स्रोत
और अपनी स्क्रिप्ट पर सख्त उपयोग करें; जोड़ें। आप इसे लंबे समय तक लाभान्वित करेंगे।
जोड़ा लेखक flesk, स्रोत

1 उत्तर

सबसे पहले आपको अपने कार्यक्रम की शुरुआत में हमेशा सख्त और चेतावनियों का उपयोग करना चाहिए, विशेष रूप से इसे ठीक करने में सहायता मांगने से पहले।

आपने दो <�कोड> एचटीएमएल :: टैगफिल्टर ऑब्जेक्ट्स बनाए हैं: $ tf जिसमें कोई फ़िल्टर नहीं है और $ self जो </कोड> तत्व। आपने एचटीएमएल को संसाधित करने के लिए $ tf का उपयोग किया है ताकि आपका डेटा अपरिवर्तित हो।

यह कोड मेरे द्वारा उल्लिखित सुधारों और कुछ अन्य लोगों के साथ काम करता है।

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, स्रोत
वह चेतावनी का उपयोग कर रहा है जैसा कि प्रश्न में शामिल चेतावनियों द्वारा सुझाया गया है। मैं सहमत हूं कि चेतावनियों का उपयोग करें एक खोल एक-लाइनर के अलावा किसी अन्य चीज़ के लिए w ध्वज की तुलना में बेहतर अभ्यास है।
जोड़ा लेखक flesk, स्रोत
बस ऐसा लगता है कि आप यह कह रहे थे कि वह नहीं था, और यह चेतावनियां का उपयोग है जो वह आउटपुट उत्पन्न करता है जिसके साथ वह मदद मांग रहा है (भले ही वह उसकी एकमात्र समस्या न हो)।
जोड़ा लेखक flesk, स्रोत
@flesk: और तुम्हारा मुद्दा क्या है?
जोड़ा लेखक Borodin, स्रोत
ठीक है, क्षमा करें अगर वह स्पष्ट नहीं था। मैं आश्चर्यचकित हूं कि अभी भी बहुत से लोग उपयोग करते हैं-जब यह यूनिक्स सिस्टम के अलावा कुछ भी ज्यादा अप्रासंगिक है
जोड़ा लेखक Borodin, स्रोत
कुछ विज्ञापन पृष्ठभूमि-छवियां हैं, जैसे html # type-toyota-article-structured.template-toyota-article body a div # brandcape । यही कारण है कि आप उन्हें इस से हटा नहीं सकते हैं। मुझे विश्वास है कि कुछ फ़्लैश तत्व भी हैं।
जोड़ा लेखक simbabque, स्रोत