1
#!/usr/bin/perl

use strict;
use warnings;
use WWW::Mechanize;
use FindBin qw($Bin);
print $Bin;
my $folder = "$Bin/Resources";
mkdir($folder, 0700) unless(-d $folder );
chdir($folder) or die "can't chdir $folder\n";
my $url = 'http://www.ukgamingcomputers.co.uk/images/zalmanz11plus.jpg';
my $local_file_name = 'pic.jpg';
my $mech = WWW::Mechanize->new;
$mech->get( $url, ":content_file" => $local_file_name );

現在、このコードを使用して.jpgをダウンロードし、Resourcesというフォルダーに配置しています。http://www.ukgamingcomputers.co.uk/images/ディレクトリにあるすべての.jpgをダウンロードしたいと思います。私はこれをどのように達成するのか全く分かりません。あなたがコードソリューションを持っているなら、私は感謝するでしょう!

4

3 に答える 3

2

恐れ入りますが、それはできません。また、Webサイトの所有者があなたに望んでいる可能性は低いです。

そのパスに画像をダウンロードすることに実際的な問題はありませんが、それらをすべてフェッチするには、それらが何と呼ばれるかを知る必要があり、を使用してディレクトリリストを取得する方法はありませんHTTP

サイトをクロールし、そこからすべてのHTMLページを取得して、それらのページがリンクしているすべての画像ファイルの名前を見つけることはできますが、それは厄介であり、サイト所有者に受け入れられる可能性はさらに低くなります。また、ディレクトリ内のすべての画像ではなく、サイトで使用されている画像のみを取得します。

一部のHTTPサーバーは、URLに特定のファイルが指定されておらずindex.html、送信するデフォルトのファイルがない場合にHTMLでディレクトリのリストを返すように構成されていますが、セキュリティ違反を表すため、これは最近では珍しいことです。

サイトの所有者が自分の写真を手伝っても構わないと思うなら、写真のコピーを求めるメールを送ってみませんか?

于 2013-03-15T17:50:36.727 に答える
1

使用する必要がありますWWW::Mechanizeか?

HTML::LinkExtorこれがとの例ですLWP::Simple

編集:これは実際に指定されたアドレスからすべての画像をプルします。

#!/usr/bin/perl

use warnings;
use strict;

use LWP::Simple;
use HTML::LinkExtor;
use Data::Dumper;
$Data::Dumper::Indent=1;

die "usage: $0 url\n" if @ARGV != 1;
my $url = shift;
$|++;

if ( $url !~ /^http/ ) { 
  print "usage: url ( http(s)://www.example.com/  )\n"; 
  exit(1);
}

my %images = (); 
my $html = get($url) 
  or die "could not get $url\n";

my $parser = HTML::LinkExtor->new(undef, $url);
$parser->parse($html);

my @all_link_refs = $parser->links();

for my $link_ref ( @all_link_refs  ) { 
  my ( $html_tag, $attr_name, $this_url ) = @$link_ref;
  if ( ($html_tag eq 'img') ) { 
    my $image_name = (split("/", $this_url))[-1];
    $images{$image_name}++;

    if ( $images{$image_name} == 1  ) { 
        print "Downloading $this_url to $image_name...\n";
        open my $PIC, ">", "$image_name";
        my $image = get($this_url);
        print $PIC $image;
    }   
  }
}

OUPUT:

$ test.pl http://google.com
Downloading http://google.com/intl/en_ALL/images/srpr/logo1w.png to logo1w.png...
于 2013-03-15T17:44:12.400 に答える
1

あなたの例に従うように、これはあなたがリストしたそのサイトからjpgを引き出します。

#!/usr/bin/perl 
use strict;
use warnings;

use WWW::Mechanize;
use WWW::Mechanize::Link;
use Getopt::Long;

exit int main( parse_args() );

sub main {
    my $opts = shift;

    my $folder = $opts->{folder};
    chdir($folder) or die "can't chdir $opts->{folder}\n";

    my $mech = WWW::Mechanize->new;
    $mech->get( $opts->{url} );

    for my $link ( $mech->links() ) {
        next unless $link->text() =~ /jpg$/;
        $mech->get( $link->url() );
        $mech->save_content( $link->text() );
    }
}

sub parse_args {
    my %opts = (
        url    => "http://www.ukgamingcomputers.co.uk/images/",
        folder => "/home/kprice/tmp",
    );

    GetOptions( \%opts, 'url|u=s', 'folder|d=s', ) or die $!;

    return \%opts;
}

Linuxを使用している場合、これは機能しますが、そのリンクからすべてをプルします。

$ wget -r http://www.ukgamingcomputers.co.uk/images/

編集:そのクイックコピー/貼り付けの少し後に修正しました。

于 2013-03-15T18:15:53.193 に答える