WWW::Mechanize::Firefox-那里最全-只剩下一点regex错误
对我来说Perl有时看起来有点像Abracadabra 非常感谢你对我的耐心 更新在user1269651和Bodoin提供大量修复之前,出现了一些错误 查看bodoins代码的结果…(注意,他更改了一次代码-我在这里使用了有史以来的第一个版本…:WWW::Mechanize::Firefox-那里最全-只剩下一点regex错误,regex,perl,firefox,firefox-addon,www-mechanize,Regex,Perl,Firefox,Firefox Addon,Www Mechanize,对我来说Perl有时看起来有点像Abracadabra 非常感谢你对我的耐心 更新在user1269651和Bodoin提供大量修复之前,出现了一些错误 查看bodoins代码的结果…(注意,他更改了一次代码-我在这里使用了有史以来的第一个版本…: linux-wyee:/home/martin/perl # perl test_7.pl http://www.unifr.ch/sfm http://www.zug.phz.ch http://www.schwyz.phz.ch http://w
linux-wyee:/home/martin/perl # perl test_7.pl
http://www.unifr.ch/sfm
http://www.zug.phz.ch
http://www.schwyz.phz.ch
http://www.luzern.phz.ch
http://www.schwyz.phz.ch http://www.phvs.ch http://www.phtg.ch http://www.phsg.ch http://www.phsh.ch Use of uninitialized value $png in print at test_7.pl line 25, <$urls> line 10. http://www.phr.ch http://www.hepfr.ch/
http://www.phbern.ch
http://www.ph-solothurn.ch
http://www.pfh-gr.ch
Got status code 500 at test_7.pl line 14
linux-wyee:/home/martin/perl #
到目前为止还不错,我想我试过这样的
如果我们不再需要文件处理程序,我们也必须关闭它。除此之外,我们可以在打开时使用“或死”。我做到了-见下文
顺便说一句,我们需要一个好的文件名。因为我有一个巨大的URL列表,然后我会得到一个巨大的输出文件列表。因此,我需要有一个好的文件名。我们能在程序中反映这些事情和需要吗
脚本根本没有启动
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize::Firefox;
my $mech = new WWW::Mechanize::Firefox();
open(INPUT, "<urls.txt") or die $!;
while (<INPUT>) {
chomp;
next if $_ =~ m/http/i;
print "$_\n";
$mech->get($_);
my $png = $mech->content_as_png();
my $name = "$_";
$name =~s#http://##is;
$name =~s#/##gis;$name =~s#\s+\z##is;$name =~s#\A\s+##is;
$name =~s/^www\.//;
$name .= ".png";
open(my $out, ">",$name) or die $!;
binmode($out);
print $out $png;
close($out);
sleep (5);
}
!/usr/bin/perl
严格使用;
使用警告;
使用WWW::Mechanize::Firefox;
my$mech=new WWW::Mechanize::Firefox();
打开(输入“,$名称)或模具$!;
binmode($out);
打印$out$png;
收尾(美元);
睡眠(5);
}
您的代码存在许多问题。最重要的是行
next if $_ =~ m/http/i;
它将丢弃urls.txt
中包含http
的所有行,这不是您想要的
我提供了一个功能性的版本,希望这是令人满意的
use strict;
use warnings;
use WWW::Mechanize::Firefox;
my $mech = new WWW::Mechanize::Firefox();
open my $urls, '<', 'urls.txt' or die $!;
while (<$urls>) {
chomp;
next unless /^http/i;
print "$_\n";
$mech->get($_);
my $png = $mech->content_as_png;
my $name = $_;
$name =~ s#^http://##i;
$name =~ s#/##g;
$name =~ s/\s+\z//;
$name =~ s/\A\s+//;
$name =~ s/^www\.//;
$name .= ".png";
open my $out, ">", $name or die $!;
binmode $out;
print $out $png;
close $out;
sleep 5;
}
使用严格;
使用警告;
使用WWW::Mechanize::Firefox;
my$mech=new WWW::Mechanize::Firefox();
打开我的$URL,“我想到了这个:
while (my $name = <DATA>) {
chomp ($name) ;
#$mech->get($_);
#my $png = $mech->content_as_png();
$name =~ s#http://##; #REMOVE THIS LINE
$name =~s#/#-#gis;
$name =~s#\s+\z##is;$name =~s#\A\s+##is;
$name =~s/^www\.//;
$name .= ".png";
print $name . "\n\n"; #REMOVE THIS LINE
#open(my $out, ">",$name) or die $!;
#binmode($out);
#print $out $png;
#close($out);
#sleep (5);
}
__DATA__
http://www.unifr.ch/sfm
http://www.zug.phz.ch
http://www.schwyz.phz.ch
http://www.luzern.phz.ch
http://www.schwyz.phz.ch
http://www.phvs.ch
http://www.phtg.ch
http://www.phsg.ch
http://www.phsh.ch
http://www.phr.ch
http://www.hepfr.ch/
http://www.phbern.ch
while(我的$name=){
chomp($name);
#$mech->get($\ux);
#my$png=$mech->content_as_png();
$name=~s#http://####删除此行
$name=~s#/#-#gis;
$name=~s#\s+\z###is;$name=~s##\A\s+##is;
$name=~s/^www./;
$name.=“.png”;
打印$name。“\n\n”#删除此行
#打开(我的$out,“>”,$name)或死亡$!;
#binmode($out);
#打印$out$png;
#收尾(美元);
#睡眠(5);
}
__资料__
http://www.unifr.ch/sfm
http://www.zug.phz.ch
http://www.schwyz.phz.ch
http://www.luzern.phz.ch
http://www.schwyz.phz.ch
http://www.phvs.ch
http://www.phtg.ch
http://www.phsg.ch
http://www.phsh.ch
http://www.phr.ch
http://www.hepfr.ch/
http://www.phbern.ch
你应该可以根据自己的需要修改它,我注释掉了除regex以外的所有内容。我还更改了一个regec,将“/”替换为“-”,这样就不太可能错误地生成重复的URL
所以http://www.unifr.ch/sfm
将如下所示:unifr.ch sfm
希望这有帮助顺便说一句,这是一个“文件句柄”(允许保存文件的东西),而不是“文件处理程序”(响应文件的东西)。你的问题是什么?你暗示你得到了不正确的结果,但你没有指定这些结果是什么以及它们应该是什么。嗨,ikegami-非常感谢你的快速回复-我没有得到任何结果-我想要一些小缩略图-保存在本地并命名为URL…doableupdate;mech似乎有一些错误anize…我想是的!!!你好deaar Borodin-非常感谢-我尝试一下。你这个摇滚歌手!!还有一些小事情要做-见上文…我们能对这些小错误做些什么…见最初的帖子…顺便问一下:将结果存储在文件夹中的想法如何…/(称为图像或其他!)您好,亲爱的用户1269651。thx很多-看起来令人印象深刻!!将结果存储在名为images或so的文件夹中的想法如何?)这可行吗?这将有很大帮助,因为我将结果存储在一个文件夹中。而且许多结果并没有弄乱机器。。。期待收到您的来信-非常感谢!!您可以这样存储在目录中:open(my$out,“>”,“path/$name”)或die$!;
use strict;
use warnings;
use WWW::Mechanize::Firefox;
my $mech = new WWW::Mechanize::Firefox();
open my $urls, '<', 'urls.txt' or die $!;
while (<$urls>) {
chomp;
next unless /^http/i;
print "$_\n";
$mech->get($_);
my $png = $mech->content_as_png;
my $name = $_;
$name =~ s#^http://##i;
$name =~ s#/##g;
$name =~ s/\s+\z//;
$name =~ s/\A\s+//;
$name =~ s/^www\.//;
$name .= ".png";
open my $out, ">", $name or die $!;
binmode $out;
print $out $png;
close $out;
sleep 5;
}
while (my $name = <DATA>) {
chomp ($name) ;
#$mech->get($_);
#my $png = $mech->content_as_png();
$name =~ s#http://##; #REMOVE THIS LINE
$name =~s#/#-#gis;
$name =~s#\s+\z##is;$name =~s#\A\s+##is;
$name =~s/^www\.//;
$name .= ".png";
print $name . "\n\n"; #REMOVE THIS LINE
#open(my $out, ">",$name) or die $!;
#binmode($out);
#print $out $png;
#close($out);
#sleep (5);
}
__DATA__
http://www.unifr.ch/sfm
http://www.zug.phz.ch
http://www.schwyz.phz.ch
http://www.luzern.phz.ch
http://www.schwyz.phz.ch
http://www.phvs.ch
http://www.phtg.ch
http://www.phsg.ch
http://www.phsh.ch
http://www.phr.ch
http://www.hepfr.ch/
http://www.phbern.ch