2013-03-06 110 views
0

我想從HTML頁面中只提取文本,並且想要忽略或繞過html轉義符號「<」和「 >「。我複製的一部分,我用於提取文本的html頁面:如何繞過HTML轉義符號和僅從HTML文件中提取文本使用web :: scraper的Perl文件

 <table class="reference"> 
    <tr> 
    <th align="left" width="25%">Tag</th> 
    <th align="left" width="75%">Description</th> 
    </tr> 
    <tr> 
    <td><a href="tag_comment.asp">&lt;!--...--&gt;</a></td> 
    <td>Defines a comment</td> 
    </tr> 
    <tr> 
    <td><a href="tag_doctype.asp">&lt;!DOCTYPE&gt;</a>&nbsp;</td> 
    <td>Defines the document type</td> 
    </tr> 
    <tr> 
    <td><a href="tag_a.asp">&lt;a&gt;</a></td> 
    <td>Defines a hyperlink</td> 
    </tr> 
    <tr> 
    <td><a href="tag_abbr.asp">&lt;abbr&gt;</a></td> 
    <td>Defines an abbreviation</td> 
    </tr> 
    <tr> 
... 

我的Perl代碼:

my $urlToScrape = "http://www.w3schools.com/tags/"; 

# prepare data 
my $teamsdata = scraper { 
process "table.reference > tr > td > a ", 'tags[]' => 'TEXT'; 
process "table.reference > tr > td > a ", 'urls[]' => '@href'; 
}; 

# scrape the data 
my $res = $teamsdata->scrape(URI->new($urlToScrape)); 

print "<HTML_tags>\n"; 
for my $i (0 .. $#{$res->{urls}}) { 
print FILE " <tag_Name> $res->{tags}[$i] </tag_Name>\n "; 
} 
print "</HTML_tags>\n"; 

輸出我得到的是以下幾點:

<HTML_tags> 
    <tag_Name> <!--...--> </tag_Name> 
     <tag_Name> <!DOCTYPE> </tag_Name> 
     <tag_Name> <a> </tag_Name> 
     <tag_Name> <abbr> </tag_Name> 
</HTML_tags> 

而我想輸​​出爲:

<HTML_tags> 
    <tag_Name> !--...-- </tag_Name> 
     <tag_Name> !DOCTYPE </tag_Name> 
     <tag_Name> a </tag_Name> 
     <tag_Name> abbr </tag_Name> 
</HTML_tags> 

任何人都可以告訴我必須改變什麼以獲得上述輸出? 非常感謝。

回答

2

蠻力:

$res->{tags}[$i] =~ s/[\<\>]//gs; ## Added line 
print FILE " <tag_Name> $res->{tags}[$i] </tag_Name>\n "; 
+0

非常感謝。它爲我工作。你能告訴我這裏的/ s是什麼意思嗎?我知道/ g,它將「當前字符串」中的任何確切字符序列'<>'替換爲空白。 – user2027571 2013-03-06 21:37:14