gpt4 book ai didi

html - 使用 Perl 解析 html 适用于 2 行但不是多行

转载 作者:行者123 更新时间:2023-11-28 03:44:30 24 4
gpt4 key购买 nike

我编写了以下 Perl 脚本-

use HTML::TreeBuilder;

my $html = HTML::TreeBuilder->new_from_content(<<END_HTML);

<span class=time>1 h </span>
<a href="http://foo.com/User">User</a>: There are not enough <b>big</b>
<b>fish</b> in the lake ;
END_HTML

my $source = "foo";
my @time = "10-14-2011";
my $name = $html->find('a')->as_text;
my $comment = $html->as_text;
my @keywords = map { $_->as_text } $html->find('b');

输出- foo, 10-14-2011, User, 1h User: there are not enough big fish in the lake, big fish这是完美的,我想从测试 html 中得到什么,但是这只有在我放入上述 HTML 时才能正常工作,这是我出于测试目的所做的。

然而,完整的 HTML 文件有多个实例“a”和“b”的引用,因此当打印出这些列的结果时,它们是空白的。

如何考虑特定搜索的多个值?

最佳答案

如果看不到真正的 HTML,很难提供帮助,但是 $html->find返回 <a> 的列表元素,所以你可以这样写

foreach my $anchor ($html->find('a')) {
print $anchor->as_text, "\n";
}

但这会找到所有 <a>元素,这不太可能是你想要的。 $html->look_down() 更加灵活,并提供按属性和标签名称进行搜索。

如果没有看到您正在处理的数据,我无法开始猜测您的评论问题。


如果您需要独立处理每个文本元素,那么您可能需要调用 objectify_text方法。这会将树中的每个文本元素都变成一个带有 ~text 的伪元素。标签名称和 text属性,例如 <p>paragraph text</p>将被转化为 <p><~text text="paragraph text" /></p> .可以使用 $html->find('~text') 发现这些元素像平常一样。下面是一些代码来演示

use strict;
use warnings;

use HTML::TreeBuilder;

my $html = HTML::TreeBuilder->new_from_content(<<END_HTML);

<span class=time>1 h </span>
<a href="http://foo.com/User">User</a>: There are not enough <b>big</b>
<b>fish</b> in the lake ;
END_HTML

$html->objectify_text;
print $_->attr('text'), "\n" for $html->find('~text');

输出

1 h 

User
: There are not enough
big

fish
in the lake ;

关于html - 使用 Perl 解析 html 适用于 2 行但不是多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com