如何使用Perl从网站下载链接目标?

era*_*oil 4 perl download www-mechanize

我刚刚创建了一个脚本来从网站上获取链接,然后将它们保存到文本文件中.

现在我正在我的正则表达式,因此会抓住它包含链接php?dl=从文本文件的URL:

例如: www.example.com/site/admin/a_files.php?dl=33931

它几乎是您将鼠标悬停在dl网站上的按钮上时获得的地址.您可以从中单击下载或"右键单击保存".

我只是想知道如何做到这一点,不必下载指定的地址,将下载的内容*.txt文件.一切都来自剧本.

Zai*_*aid 7

成为WWW::Mechanize你最好的朋友.

原因如下:

  • 它可以识别网页上与特定正则表达式匹配的链接(/php\?dl=/在本例中)
  • 它可以通过该follow_link方法跟踪这些链接
  • 它可以get是这些链接的目标并将它们保存到文件中

所有这些都无需在中间文件中保存您想要的链接!当你有适合工作的工具时,生活很美好......


use strict;
use warnings;
use WWW::Mechanize;

my $url  = 'http://www.example.com/';
my $mech = WWW::Mechanize->new();

$mech->get ( $url );

my @linksOfInterest = $mech->find_all_links ( text_regex => qr/php\?dl=/ );

my $fileNumber++;

foreach my $link (@linksOfInterest) {

    $mech->get ( $link, ':contentfile' => "file".($fileNumber++).".txt" );
    $mech->back();
}
Run Code Online (Sandbox Code Playgroud)


Eug*_*ash 5

您可以使用LWP::UserAgent下载文件:

my $ua = LWP::UserAgent->new();  
my $response = $ua->get($url, ':content_file' => 'file.txt');  
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要文件句柄:

open my $fh, '<', $response->content_ref or die $!;
Run Code Online (Sandbox Code Playgroud)

  • 或者,只需使用'LWP::Simple::getstore($url, $file)`。 (2认同)