Perl:从web目录下载所有.jpgs

Perl:从web目录下载所有.jpgs,perl,file,download,Perl,File,Download,我目前正在使用这段代码下载一个.jpg,并将其放在一个名为Resources的文件夹中。我想下载目录中的所有.jpg。我完全不知道如何才能做到这一点。如果您有代码解决方案,我将不胜感激 您必须使用WWW::Mechanize 下面是一个使用HTML::LinkExtor和LWP::Simple 编辑:这实际上是从给定地址提取所有图像 #!/usr/bin/perl use strict; use warnings; use WWW::Mechanize; use FindBin qw($Bin

我目前正在使用这段代码下载一个.jpg,并将其放在一个名为Resources的文件夹中。我想下载目录中的所有.jpg。我完全不知道如何才能做到这一点。如果您有代码解决方案,我将不胜感激

您必须使用
WWW::Mechanize

下面是一个使用
HTML::LinkExtor
LWP::Simple

编辑:这实际上是从给定地址提取所有图像

#!/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 );
输出:

#!/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;
    }   
  }
}

您必须使用
WWW::Mechanize

下面是一个使用
HTML::LinkExtor
LWP::Simple

编辑:这实际上是从给定地址提取所有图像

#!/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 );
输出:

#!/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;
    }   
  }
}

恐怕你不能那样做。网站所有者也不太可能希望您这样做

下载该路径中的图像没有实际问题,但要获取它们,您需要知道它们的名称,并且无法使用
HTTP
获取目录列表

您可以对站点进行爬网,从中获取所有HTML页面,并找到这些页面链接到的所有图像文件的名称,但这样做会很麻烦,甚至不太可能为站点所有者所接受。它还将只获取站点上使用的图像,而不是目录中的所有图像

如果URL中未指定特定文件,并且没有要发送的默认
index.HTML
文件,则某些HTTP服务器会配置为以HTML格式返回目录列表,但这在当今并不常见,因为它代表了安全漏洞


如果你认为网站所有者不介意你自己看他的照片,为什么不发一封电子邮件索取一份呢?

恐怕你做不到。网站所有者也不太可能希望您这样做

下载该路径中的图像没有实际问题,但要获取它们,您需要知道它们的名称,并且无法使用
HTTP
获取目录列表

您可以对站点进行爬网,从中获取所有HTML页面,并找到这些页面链接到的所有图像文件的名称,但这样做会很麻烦,甚至不太可能为站点所有者所接受。它还将只获取站点上使用的图像,而不是目录中的所有图像

如果URL中未指定特定文件,并且没有要发送的默认
index.HTML
文件,则某些HTTP服务器会配置为以HTML格式返回目录列表,但这在当今并不常见,因为它代表了安全漏洞


如果你认为网站所有者不会介意你帮自己看他的照片,为什么不发一封电子邮件索要一份呢?

有点像你的例子,这会从你列出的网站中提取JPG

$ test.pl http://google.com
Downloading http://google.com/intl/en_ALL/images/srpr/logo1w.png to logo1w.png...
如果您使用的是linux,这将起作用,但从该链接中提取所有内容:

$wget-rhttp://www.ukgamingcomputers.co.uk/images/


编辑:在快速复制/粘贴之后,我对其进行了一点更正。

有点像你的例子,这会从你列出的站点中提取JPG

$ test.pl http://google.com
Downloading http://google.com/intl/en_ALL/images/srpr/logo1w.png to logo1w.png...
如果您使用的是linux,这将起作用,但从该链接中提取所有内容:

$wget-rhttp://www.ukgamingcomputers.co.uk/images/



编辑:在快速复制/粘贴之后,我对其进行了一些更正。

当您使用上面给出的代码段时会发生什么情况?我当前正在使用该代码下载pic.jpg并将其放入名为Resources的文件夹中。当您使用上面给出的代码段时会发生什么情况?我当前正在使用该代码下载pic.jpg并将其放入文件夹中在一个名为Resources的文件夹中,我并不真的想要这些图片,我只是在试用perl。如果这被认为是不可接受的,也许我应该尝试另一个项目?@LukeSilver我认为你可以在更大的网站上这样做。像谷歌,雅虎等等。。。我觉得这是学术性的-like@chrsblck这是个很糟糕的建议。例如,谷歌非常积极地保护他们的服务,他们的服务条款规定“不要滥用我们的服务,例如,不要干扰我们的服务,或者尝试使用我们提供的界面和指令以外的方法访问我们的服务。”@Borodin Fair,“那我就回过头来看看了。@LukeSilver:大多数网站所有者对于自动访问他们的网站是合理的,并且对运行程序的人感到满意,这些程序可以获取一些信息,并且不会像浏览器上的人工操作员那样在服务器上增加负载。但是,下载整个站点的完整图形资源而不在请求之间暂停,这会给你带来好运。我并不真的想要这些图片,我只是在试用perl。如果这被认为是不可接受的,也许我应该尝试另一个项目?@LukeSilver我认为你可以在更大的网站上这样做。像谷歌,雅虎等等。。。我觉得这是学术性的-like@chrsblck这是个很糟糕的建议。例如,谷歌非常积极地保护他们的服务,他们的服务条款规定“不要滥用我们的服务,例如,不要干扰我们的服务,或者尝试使用我们提供的界面和指令以外的方法访问我们的服务。”@Borodin Fair,“那我就回过头来看看了。@LukeSilver:大多数网站所有者对于自动访问他们的网站是合理的,并且对运行程序的人感到满意,这些程序可以获取一些信息,并且不会像浏览器上的人工操作员那样在服务器上增加负载。但是,下载整个网站的完整图形资源而不在请求之间暂停,这会给你带来好运。这并不能满足你的要求。它只获取给定HTML页面的
img
元素的
src
属性中指定的所有文件。@Borodin正确。我稍微解释了一下这个问题。OP的问题没有意义,因为您必须知道要下载的文件名。很可能