【发布时间】:2011-09-13 15:56:45
【问题描述】:
我需要忽略或删除所有 HTML 元素之间的所有文本,以便从给定网页生成空白模板。
我正在使用 perl 模块 HTML::TreeBuilder 和 HTML::Element 进行解析。
我已经尝试过文档中提到的 ignore_text 方法,但没有提供正确的结果。
我也尝试过将 DOMXpath 与 PHP 一起使用来做同样的事情,但结果似乎太麻烦而无法管理。正则表达式可能有效,但对我来说是最后的手段。
这是我当前代码的一部分,非常基本。底部只是输出到文件。所有代码都可以正常工作,我只需要格式化即可生成模板文件。
my $url= "http://www.example.com";
my $page = get($url) or die $!;
my $tree = HTML::TreeBuilder->new_from_content($page);
$tree->parse_file($page);
$tree->ignore_text;
$tree->elementify;
open OUTPUT, "+>".$body;
my $output = $tree->as_HTML;
print OUTPUT $output;
close OUTPUT;
提前感谢您的帮助!
编辑:我发现了问题 - 忽略文本仅在您从物理文件解析时才有效。我必须将页面保存为临时文件以进行解析,然后以我想要的方式输出没有文本,然后我只是在底部做了 unlink($tmp) 来删除文件。此后,我的脚本在读取和写入数据库时变得更加复杂,每次我需要创建这个临时文件时,这有点烦人......
感谢下面的回复!
【问题讨论】:
-
与其提议编辑以提供解决方案,不如删除问题或将您的解决方案作为答案发布(然后您可以接受),以便人们将来可以从中受益。您可能想阅读FAQ 以了解有关 SO 工作原理的更多信息。 :)
标签: perl html-parsing perl-module