我是 Perl 新手,通常是编程新手。我在这里面临一些真正的问题。我需要一个可以打开文本文件、读取一系列 URL、获取页面内容、进行 HTML 清理以及将内容保存到另一个文件的 Perl 脚本。
非常感谢您的任何指导。
请参阅以下现实生活示例,一种简单的方法是:
要读取的文件:
$ cat /tmp/list.txt
http://stackoverflow.com/questions/10627644/perl-script-to-open-file-get-url-and-make-html-cleaning
http://google.com
Perl 代码,我使用基本的 LWP::UserAgent “浏览器”
#!/usr/bin/env perl
use strict;
use warnings;
require LWP::UserAgent;
open FH, "<", "/tmp/list.txt";
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
foreach my $line (<FH>) {
my $response = $ua->get($line);
if ($response->is_success) {
# you need another file handle here to write to a new file
print $response->decoded_content;
}
else {
die $response->status_line;
}
}
close FH;
这是一个很好的基础,你还有更多的工作来完成你的所有需求: - 使用另一个文件句柄来编写一个新文件 - 清理 HTML
编辑:真的不知道“清理”怎么样:你想将页面转储为没有任何 HTML 的文本吗?如果是,请考虑:
#!/usr/bin/env perl
use strict;
use warnings;
while (<>) {
`links -dump "$_" > "$1" `if m!https?://([^/]+)!;
}
然后,在你的 shell 中,你可以这样调用脚本:
$ perl script.pl < /path/to/URLs.list
会这样
open
打开文本文件while (<$fh>) { ... }
从中读取chomp
每行删除换行符LWP
模块读取每个 URLopen
和print
写入文件这是一个如何完成的示例,包括 html 清理和文件保存
#!/usr/bin/perl
use LWP::Simple;
use HTML::Clean;
open FILE, "</path/to/file/urls.txt" or die $!;
while(<FILE>){
chomp $_;$url=$_;
my $content=get($url);
my $h = new HTML::Clean(\$content);
$h->compat();
$h->strip();
my $data = $h->data();
$url=~s/(http:\/\/)(.+\..+)(\/*)/$2/g;
open NF, ">>/path/to/file/$url.html";
binmode(NF, ":utf8");
print NF $$data;
close NF;
}
close FILE;
这会将“http://url.com/something”保存为“url.com.html”