Chinaunix首页 | 论坛 | 博客
  • 博客访问: 263223
  • 博文数量: 30
  • 博客积分: 4398
  • 博客等级: 中校
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-06 21:21
文章分类

全部博文(30)

文章存档

2013年(10)

2012年(1)

2011年(17)

2010年(2)

分类: Python/Ruby

2011-03-24 19:16:35

    现在的网页大多是css+div的界面设计,所以当我们在遇到我们“欣赏”的页面时就忍不住想保存一下(其实这css+div真是我们这些不会做vi设计的宝贝)。
    如果你和我一样不会为了获取几张页面也安装个软件而只喜欢“另存为”一下的话,当你下载完打开网页一看,好像和人家原来的页面不太一样啊。这大多是因为有些背景图或效果渲染的图片被写在css文件里的缘故(还有的就是讨厌的js调用,不在本文范围),在下载网页的时候这些图片没有被保存到当地。如果css里背景url用的是绝对地址当然页面还是会显示的,但大多用的是相对于css文件所在目录的相对地址。
    下面的perl小脚本就是把css文件中的图片保存到当地,并把css中图片的url修改为当前css的相对地址,输出一个新的css文件。网页使用新生成的css文件后我们在打开页面时就好多了。
    这个脚本并无技巧可言,但这就是Perl,能随时帮你处理你遇到的问题。

  1. use strict;
  2. use warnings;
  3. use LWP::Simple;
  4. use URI;
  5. my $dir='img'; #存放图片的文件夹名称
  6. my $css_url=''; #原网站css文件所在目录
  7. open CSS,"
  8. open NEW,">new_css.css" or die "can't open file:$!"; #生成的新css文件

  9. mkdir $dir;
  10. my %url;
  11. while(){
  12. while(/url\s*?\(\s*?(?:"|')?\s*?(.*?)\s*?(?:"|')?\s*?\)/sg){
  13. $url{$1}="\n";
  14. }
  15. s/(url\s*?\(\s*?(?:"|')?\s*?).*?(\/\w+\.\w+\s*?(?:"|')?\s*?\))/$1$dir$2/sg;
  16. print NEW;
  17. }
  18. close CSS;
  19. for (keys %url){
  20. if (/^http:/){
  21. getimg($_);
  22. } else {
  23. my $myurl=URI->new_abs($_,$css_url);
  24. getimg($myurl);
  25. }
  26. }
  27. sub getimg {
  28. my $link=shift;
  29. my $name=$1 if $link=~/\/([^\/]+)$/;
  30. print "Get $name now...\n";
  31. my $img=get("$link");
  32. open IMG,">$dir/$name" or die "$!";
  33. binmode(IMG);
  34. print IMG $img;
  35. close IMG;
  36. }
阅读(2657) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

x9x92011-04-28 20:35:37

2gua: 内容实用,而且详细。而且感觉X9*2在Perl论坛里也比较活跃。.....
哈哈,多谢。基本还算是Perl初学,仍需努力~

2gua2011-04-26 10:11:46

内容实用,而且详细。而且感觉X9*2在Perl论坛里也比较活跃。

小雅贝贝2011-03-25 09:51:41

x9x9: 哈哈,hope not a white lie。但愿它无伤大雅,同时又能支持小雅。.....
加油~~
谢谢你哦

x9x92011-03-24 22:27:37

小雅贝贝: 很不错的文章呢~~
支持下,也感谢你对博客活动的支持哦~
希望以后继续写博文~~.....
哈哈,hope not a white lie。但愿它无伤大雅,同时又能支持小雅。

小雅贝贝2011-03-24 22:19:09

很不错的文章呢~~
支持下,也感谢你对博客活动的支持哦~
希望以后继续写博文~~