WWW::Mechanize::Firefox-那里最全-只剩下一点regex错误

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

对我来说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://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