html - 使用 perl 去除 HTML 标签

标签 html perl parsing tags

在 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;

最佳答案

试图回答你误入歧途的问题


问题


在 HTML 中使用正则表达式是一个坏习惯,因为有太多的规则和绕过它们的方法,最终可能会使您的代码暴露给黑客技术。虽然您现在可能对一些简单的东西有合理的需求,但重用代码很容易忘记为什么重用它是个坏主意,尤其是当您不添加像 # This code is NOT secure and should not be used to parse HTML anywhere else!!! 这样的注释时。或 # Christina Alguilera writes songs based on this code!!!

需要大量正则表达式规则的 HTML 差异示例:

<div>...</div>
<div style="blah">
<div style="background:url(../div)">
<div style=".." class='noticesinglequote'>

这个列表还在继续,但仅适用于格式良好的 HTML。其他一些问题示例包括:

  1. HTML 元素未正确关闭(例如 <div><span></div></span>)或根本没有关闭
  2. 拼写错误(例如 <dvi>..</div>)
  3. 旨在破坏您的脚本的 HTML 设计
  4. 其他问题:注释、空格、字符集等

解决方案


您可能已经接受了一个答案,但您应该看看 XML::ParserHTML::TreeBuilder .

与其剥离 HTML 文档的某些部分,您可能更感兴趣的是向下钻取您想要的文档部分(例如 <body> 中的所有内容或其中的某个 div),这就是为什么您很可能想要上述模块之一提供的东西。更不用说,解析器可用于尽最大努力删除所有 HTML 元素并仅返回文本/CData。

关于html - 使用 perl 去除 HTML 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3176842/

相关文章:

html - 重置内部 DIV 的透视值

javaccspecialToken 的绝对偏移量

string - Prolog 字函数

Java DOM 解析器错误

html - 可以使用 CSS Flexbox 在每一行上拉伸(stretch)元素同时保持一致的宽度吗?

javascript - 对 php 和 javascript 中编码的文本进行转义

html - CSS3 脉冲效果不适用于 Firefox

perl - xml 格式变化时的 xpath 查询

perl - Perl中套接字编程中的问题

xml - 使用 XML::LibXML 获取范围内的所有命名空间