我的perl脚本有点问题。我正在尝试将HTML文件的内容转换为CSV。那部分不是问题。我正在为2个HTML文件做同样的事情,并期望2个CSV文件。一切都很好,除了一件事。第一个CSV文件非常好,但是第二个CSV文件包含第一个文本中的所有文本第二个文本....我粘贴了我的脚本并删除了数据提取和HTML下载的行。所以下面剩下的部分是普通文件处理......我在这里缺少什么????
#!/usr/bin/perl
..
my $saveFileName = "x";
my $saveCsvName = "x";
sub parse_page{
open(CSV, ">".$saveCsvName);
my $tree = HTML::TreeBuilder->new();
$tree->parse_file($saveFileName);
my @adds = $tree->look_down(sub { lc($_[0]->attr('class')) eq 'ad_row' });
foreach $add(@adds){ print CSV $stuff."\n"; } #do stuff and print
$tree->delete;
close(CSV);
}
# Main -----------------------------------------------------
$saveFileName = "A_".$vandaag.".html";
$saveCsvName = "A_".$vandaag.".csv";
parse_page();
$saveFileName = "B_".$vandaag.".html";
$saveCsvName = "B_".$vandaag.".csv";
parse_page();
答案 0 :(得分:5)
好的,在添加use strict
和use warnings
后,我必须声明一些我忘记的变量($add
中的foreach
只是其中之一)。其中一个非常讨厌。但在解决之后我的小问题就消失了......
令人讨厌的一个(在#c中使用未初始化的值):原来:
my @adds = $tree->look_down(sub { lc($_[0]->attr('class')) eq 'ad_row' });
应该是:
my @adds = $tree->look_down(sub { (defined $_[0]->attr('class')) and lc($_[0]->attr('class')) eq 'ad_row' });
获得支持!