0

私にとって、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 # 

bodinsコードの最新バージョンでは、いくつかの結果がそのように見えます..

Can't call method "addProgressListener" on an undefined value at /usr/lib/perl5/site_perl/5.14.2/WWW/Mechanize/Firefox.pm line 566, <$urls> line 12.

いくつかの小さな問題が残っています - 上記を参照してください... これらの小さなエラーで何ができるでしょうか.. ところで、結果をフォルダーに保存するという考えはどうでしょうか。.. /(いわゆる画像とか!?)

更新終了…

ここで最初のスレッドが開始され、何が必要かの概要が示されます。

私はウェブサイトからいくつかのサムネイルを持っている必要がありますが、wgetを使用しようとしました-しかし、必要なものをレンダリングする機能が必要なので、それは私にとってはうまくいきません:ファイルに保存された2,500個のURLのリストがあります。 . 次に、スクリプトが必要です-以下を参照してください-ファイルを開き、行を読み取り、Web サイトを取得して画像を小さなサムネイルとして保存します。

私はたくさんのウェブサイト (2500) を持っているので、結果の命名について決心しなければなりません。

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

これまでのところとても良いです。まあ、私はこのようなことを試してみると思います

また、必要がなくなった場合は、ファイルハンドラーを閉じる必要があります。これに加えて、open で 'or die' を使用できます。私はそれをやった - 以下を参照してください!

ところで、適切なファイル名が必要です。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);
}
4

2 に答える 2

1

コードには多くの問題があります。最も重要な行は

next if $_ =~ m/http/i;

その contains からのすべての行を破棄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;
}
于 2012-03-27T20:28:00.087 に答える
1

私はこれを思いつきました:

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

必要に応じて変更できるはずです。正規表現以外はすべてコメントアウトしました。また、1 つの regec を変更して「/」を「-」に置き換え、誤って重複した URL を生成する可能性を減らしました。

したがって、 http://www.unifr.ch/sfm次のようになります。unifr.ch-sfm

お役に立てれば

于 2012-03-27T20:47:56.477 に答える