现在的网页大多是css+div的界面设计,所以当我们在遇到我们“欣赏”的页面时就忍不住想保存一下(其实这css+div真是我们这些不会做vi设计的宝贝)。 如果你和我一样不会为了获取几张页面也安装个软件而只喜欢“另存为”一下的话,当你下载完打开网页一看,好像和人家原来的页面不太一样啊。这大多是因为有些背景图或效果渲染的图片被写在css文件里的缘故(还有的就是讨厌的js调用,不在本文范围),在下载网页的时候这些图片没有被保存到当地。如果css里背景url用的是绝对地址当然页面还是会显示的,但大多用的是相对于css文件所在目录的相对地址。
下面的perl小脚本就是把css文件中的图片保存到当地,并把css中图片的url修改为当前css的相对地址,输出一个新的css文件。网页使用新生成的css文件后我们在打开页面时就好多了。
这个脚本并无技巧可言,但这就是Perl,能随时帮你处理你遇到的问题。
- use strict;
-
use warnings;
-
use LWP::Simple;
-
use URI;
-
-
my $dir='img'; #存放图片的文件夹名称
-
my $css_url=''; #原网站css文件所在目录
- open CSS,"
-
open NEW,">new_css.css" or die "can't open file:$!"; #生成的新css文件
- mkdir $dir;
-
my %url;
-
-
while(){
-
while(/url\s*?\(\s*?(?:"|')?\s*?(.*?)\s*?(?:"|')?\s*?\)/sg){
-
$url{$1}="\n";
-
}
-
s/(url\s*?\(\s*?(?:"|')?\s*?).*?(\/\w+\.\w+\s*?(?:"|')?\s*?\))/$1$dir$2/sg;
-
print NEW;
-
}
-
-
close CSS;
-
-
for (keys %url){
-
if (/^http:/){
-
getimg($_);
-
} else {
-
my $myurl=URI->new_abs($_,$css_url);
-
getimg($myurl);
-
}
-
}
-
-
sub getimg {
-
my $link=shift;
-
my $name=$1 if $link=~/\/([^\/]+)$/;
-
print "Get $name now...\n";
-
my $img=get("$link");
-
open IMG,">$dir/$name" or die "$!";
-
binmode(IMG);
-
print IMG $img;
-
close IMG;
-
}
阅读(2695) | 评论(5) | 转发(0) |