shi*_*juo 5 html tags perl parsing
什么是在perl中剥离HTML标记的最简单方法.我正在使用正则表达式从URL解析HTML工作得很好但是如何删除HTML标记?
这是我如何拉我的HTML
#!/usr/bin/perl -w
use strict;
use warnings;
use LWP::Simple;
my $now_string = localtime;
my $html = get("http://www.spc.noaa.gov/climo/reports/last3hours.html")
or die "Could not fetch NWS page.";
$html =~ s/<script.*?<\'/script>/sg;
$html =~ s/<.+?>//sg;
$html =~ m{(Hail Reports.*)Wind Reports}s || die;
my @hail = $1;
Run Code Online (Sandbox Code Playgroud)
vol*_*ron 10
进入正则表达式HTML是一个坏习惯,因为有很多规则和方法来绕过它们,最终可能会使你的代码打开黑客技术.虽然你现在可能对简单的事情有合理的需求,但是重用代码很容易,并且忘记为什么重用代码是个坏主意,特别是当你不添加像# This code is NOT secure and should not be used to parse HTML anywhere else!!!
或者# Christina Alguilera writes songs based on this code!!!
<div>...</div>
<div style="blah">
<div style="background:url(../div)">
<div style=".." class='noticesinglequote'>
Run Code Online (Sandbox Code Playgroud)
列表继续,这仅适用于格式良好的HTML.其他一些问题包括:
<div><span></div></span>
)或根本不关闭<dvi>..</div>
)您可能已经接受了答案,但您应该查看XML :: Parser和HTML :: TreeBuilder.
您可能更感兴趣的是深入了解所需文档<body>
的某些部分(例如,所有内容或其中的某些div
内容),而不是剥离HTML文档的某些部分,这就是为什么您最有可能想要其中一个以上模块提供.更不用说,解析器可用于尽力删除所有HTML元素并仅返回text/CData.
如上所述,不要使用正则表达式.有太多例外.
一个可以提供帮助的CPAN模块是HTML :: Strip:
use HTML::Strip;
my $hs = HTML::Strip->new();
my $clean_text = $hs->parse( $raw_html );
$hs->eof;
Run Code Online (Sandbox Code Playgroud)
值得学习CPAN上可用的内容并使用它.从长远来看,它将为您节省大量的工作.
看看HTML :: Restrict模块,它允许您去除或限制允许的HTML标记.剥离所有HTML标记的最小示例:
use HTML::Restrict;
my $hr = HTML::Restrict->new();
my $processed = $hr->process('<b>i am bold</b>'); # returns 'i am bold'
Run Code Online (Sandbox Code Playgroud)
我建议远离HTML :: Strip,因为它破坏了utf8编码.