2012-03-31 15 views
-1

はよく私は少し午前

  • を投稿intailの終わりに更新を参照してくださいconfued私はウェブサイトからいくつかのサムネイルを持っている必要があり

.... perlのコードallwayはビットabracadabaに見える初心者のperl-友人であること;-) ...認めざるを得ないが、私はwgetコマンドを使用しようとしました - しかし、それは私のためには機能しません。なぜなら、何が必要なレンダリング機能が必要なのです。私は、各行に1つずつ、ファイルに保存された2,500のURLのリストを持っています。次に、ファイルを開く、行を読み込んだり、Webサイトを取得したり、画像を小さなサムネイルとして保存したりするスクリプトが必要です。よく私は多くの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 

これまでのところは 良い、よく私は私が今、次の結果を得る。この

#!/usr/bin/perl 
    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, '>', "/images/$name"); 
    binmode $out; 
    print $out $png; 
    close $out; 
    sleep 5; 
    } 

ような何かをしようと考えて.... が出... と限り来るものを参照してください私が見ることができるように - 画像 "フォルダに格納されている画像はありません

なぜですか?

[email protected]:~> cd perl 
[email protected]:~/perl> perl test_8.pl 
http://www.unifr.ch/sfm 
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 2. 
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 2. 
http://www.zug.phz.ch 
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 3. 
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 3. 
http://www.schwyz.phz.ch 
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 4. 
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 4. 
http://www.luzern.phz.ch 
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 5. 
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 5. 
http://www.schwyz.phz.ch 
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 6. 
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 6. 
http://www.phvs.ch 
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 14. 
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 14.                      http://www.pfh-gr.ch                  Got status code 500 at test_8.pl line 15                       [email protected]:~/perl>                    

出力は は私が今何を行うことができます...私に言って何をしたいん!

更新

こんにちは、返信用私の愛する

THX - 私はここにアクセス許可の問題があることを推測....さて、私はこれを持って

...

#!/usr/bin/perl 
    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, '>', "/images $name")or die $!; 
    binmode $out; 
    print $out $png; 
    close $out; 
    sleep 5; 
    } 

よく動作しますが、私が得ることのできるのは、test_8.plが存在するディレクトリに格納することです。

これは許可の問題であると推測します。

私は何ができますか?

私はイメージディレクトリをperlのフォルダのどこかに置くことができますか? おそらく私は

perl-directoryまたは images-directoryのいずれかの特別なルート権限を作成しています。私は、これまでの問題を解決するために何をしたか

A-は、フォルダ 上の権限checkintた - perlの を。 perl/images

b.-ルートユーザーとしてコマンドラインでスクリプトを実行します。

私が得ることができるすべては、フォルダに格納されている結果です...

linux-wyee:/home/martin/perl_dev/perl # ls 
.directory     images     module_test   pfh-gr.ch.png phsg.ch.png   phtg.ch.png schwyz.phz.ch.png test_4.pl test_8.pl  urls.txt 
heilpaedagogik.phbern.ch.png luzern.phz.ch.png   module_test.pl  phbern.ch.png phsh.ch.png   phvs.ch.png test_2.pl   test_6.pl test_8.pl~  zug.phz.ch.png 
hepfr.ch.png     ma-shp.luzern.phz.ch.png open-local-file.pl phr.ch.png  ph-solothurn.ch.png .png   test_3.pl   test_7.pl unifr.chsfm.png 
linux-wyee:/home/martin/perl_dev/perl # 

画像フォルダが私はそれに文字列パスに名前を付ける方法を

のperl-ディレクトリ外の画像フォルダを作成

souldを何ができる

空..です?!

親愛なる友人 - 私たちは一生懸命です - 私はかなり確信しています - これは許可の問題だと思います。しかし、それを解決する方法!?

おそらく私はすべてのテストファイルをまったく新しいディレクトリに作成する必要があります。ルートとしてではなく、通常のユーザーとして!あなたは何を言っていますか!?

+2

'open(my $ out、 '>'、"/images/$ name ")というステートメントは、トラブルシューティングのために' $ die! ' – Melioratus

+0

[perl-mechanizeが重複している可能性があります。いくつかのデバッグが開始されました](http://stackoverflow.com/questions/9656892/perl-mechanize-runs-into-limitations-several-debugging-attempts-started) –

+0

こんにちはあなたが正しいことを推測してください。 – zero

答えて

5

書き込みのためにファイルを開くことができませんでした。あなたのパスは/imagesであり、そのディレクトリにアクセス権がない(おそらく存在する場合)。最初のopenと同じように、返品価値を常にopenにチェックしてください。

私があなたの場合は、/imagesを使用しません。私はコントロールするディレクトリにすべてをダウンロードし、標準のディレクトリレイアウトを混乱させることはありません。システム管理をしていない場合は、ほとんど新しいディレクトリを/に作成しないでください。

+0

hello dear brian d foy manaありがとうございます - うーん、私は許可をチェックします。あなたがしたすべてのために再びthx。 – zero

+0

**アップデート**よく私は許可を変更してもう一度試しました - それでも失敗します...注:スクリプトのバージョンは、余分なフォルダに書かれたファイルではありませんでした。 **なぜ?** – zero

+0

こんにちは、こんにちは、全部 - 初回投稿時のアップデートを参照してください...私はあなたが正しいと思います。 – zero

関連する問題