用Perl解析HTML标记并写入文件
我无法从一个文件中获取多个html标记内容。下面是我代码的最后一部分,可以解析文本并将其打印到一个文件中,每个文件读取一行:用Perl解析HTML标记并写入文件,html,perl,parsing,Html,Perl,Parsing,我无法从一个文件中获取多个html标记内容。下面是我代码的最后一部分,可以解析文本并将其打印到一个文件中,每个文件读取一行: my $h = HTTP::Headers->new; my $p = HTML::HeadParser->new($h); $p->parse($text); for ($h->header_field_names) { my @values = split ',', $h->header($_);
my $h = HTTP::Headers->new;
my $p = HTML::HeadParser->new($h);
$p->parse($text);
for ($h->header_field_names) {
my @values = split ',', $h->header($_);
if (/keywords/i , /description/i , /title/i) {
$csv1->print ($fh1, \@values);
#} elsif (/description/i) {
# $csv1->print ($fh1, \@values);
#} elsif (/title/i) {
# $csv1->print ($fh1, \@values);
}
}
}
我可以获取第一个标记并将其写入文件,但仅此而已。
最后,我希望得到一个具有多个值的CSV或制表符分隔行
我制作了非常基本的html文件,如下所示
<head><keyword>Test</keyword>
<description>Test2</description>
<title>Test3</title></head>
测试
测试2
测试3
我尝试过几种不同的方法,但都没有成功
我总是可以从中提取内容,但决不能从和中提取内容。在HTML文件前面会导致它看不到内容。现实生活中的HTML文件与我编造的文件相比似乎也很难解决这个问题。你的HTML是无效的。(
和
是无效元素。)
更新 如果要创建CSV文件,
使用Text::CSV
并将打印循环更改为如下内容:
my $csv = Text::CSV->new({eol => $/});
my @fields = ('Title', 'X-Meta-Author', 'X-Meta-Description');
$csv->print(*STDOUT, [map { $h->header($_) } @fields]);
产生:
"Foo Bar Baz",bar,foo
我将把迭代多个输入文件并打印到不同文件句柄的部分留给您。首先,问题是什么?第二,请创建一个突出显示您遇到的任何问题的列表。根据上述请求,请集中并保持简短。@t我试图正确设置您文章结尾处for循环的格式。请检查它,因为我在这个过程中删除了一个
}
,这看起来像是一个意外。我将问题回滚到第4版,这是在问题开始变化之前的原始问题。@t请停止对问题进行大量代码更改-如果您有新问题,请使用“提问”按钮。确定,无效元素我可以得到。我看到你的输出,这是伟大的,但我只想像标题和元描述和元作者某些标签。我可以根据您提供的内容写入一个文件,然后用正则表达式将其输出,但我不知道如何一次完成这一切。我还必须承认,我无法让写入文件部分正常工作。我尝试过:my$h=HTTP::Headers->new;我的$p=HTML::HeadParser->new($h)$p->parse($text);对于($h->header\u field\u names){print($fh1,%s:%s\n,$\uH->header($\u));}没有运气。我不知道您希望输出格式是什么样子。当然,抱歉。CSV文件,每个输入文件一行。类似于:标题、元作者、元描述,这样某人就可以轻松地在excel中打开。@t在这里,你不能无限期地扩大问题的范围。如果你有不同的问题,问不同的问题。我已经将您的问题回滚到最简单的代码段,它实际上展示了您所问的主要问题。@tlialin还阅读了。你问了很多问题而不接受任何答案,有些人因此认为粗鲁无礼。
my $csv = Text::CSV->new({eol => $/});
my @fields = ('Title', 'X-Meta-Author', 'X-Meta-Description');
$csv->print(*STDOUT, [map { $h->header($_) } @fields]);
"Foo Bar Baz",bar,foo