Chinaunix

标题: 多进程批量下载ubuntu官方壁纸 [打印本页]

作者: paktc    时间: 2010-08-10 13:28
标题: 多进程批量下载ubuntu官方壁纸
本帖最后由 paktc 于 2010-08-10 13:32 编辑

批量下载ubuntu官方壁纸-自然系列

我是在windows下写的,需要借助wget命令。 不过我想移到linux改一下应该也OK。

分析地址的时候设置了一个递增数 % 3 ,如果=0就当前下载 ,其余的另开进程下载,
当前下载可以达到缓冲不炸窗口的作用。 3也就是个关键数字了。

  1. foreach $number (51..63) {
  2.   system("wget --output-document link.html http://art.gnome.org/backgrounds/nature?page=$number");
  3.   open READ,"link.html";
  4.   @lines=<READ>;
  5.   close READ;
  6.   $rcd="#";
  7.   $http="http://ftp.gnome.org/pub/GNOME/teams/art.gnome.org/backgrounds/";
  8.   $i=0;
  9.   foreach (@lines) {
  10.    if (s#.*<option value="/backgrounds/nature/\d*/##i) {
  11.          s#">##;
  12.          @tmp=split("_",$_);
  13.          next if ($rcd eq $tmp[0]);
  14.          $rcd=$tmp[0];
  15.          $i+=1;   $pan=$i % 3;
  16.          if ($pan == 0) {
  17.             system("wget -nc $http$_ ");
  18.          } else {
  19.             system("start /min wget -nc $http$_");
  20.          }
  21.    }
  22.   }
  23. }
  24. print "OVER";
  25. <STDIN>;
复制代码
还有个细节是我记录了名字的某个部分
因为一个页面中有同张图片的不同分辨率的链接,比如
“NATURE-BalconVert_1024x768.jpg"
“NATURE-BalconVert_1900x1250.jpg"
避免同一张图,做了遇到同样标题调过的处理
作者: paktc    时间: 2010-08-10 14:06
我跑到ubuntu下面来试了,好像下载速度本来就很慢阿……
改了代码

  1. #!/usr/bin/perl
  2. foreach $number (51..63) {
  3.   system("wget --output-document link.html http://art.gnome.org/backgrounds/nature?page=$number");
  4.   open READ,"link.html";
  5.   @lines=<READ>;
  6.   close READ;
  7.   $rcd="#";
  8.   $http="http://ftp.gnome.org/pub/GNOME/teams/art.gnome.org/backgrounds/";
  9.   $i=0;
  10.   foreach (@lines) {
  11.    if (s#.*<option value="/backgrounds/nature/\d*/##i) {
  12.          s#">##;
  13.          @tmp=split("_",$_);
  14.          next if ($tmp[0]=~/$rcd.*/);
  15.          $rcd=$tmp[0];
  16.          $i+=1;   $pan=$i % 3;
  17.          if ($pan == 0) {
  18.             system("wget -nc $http$_ ");
  19.          } else {
  20.             system("gnome-terminal --zoom=0.1 -e \"wget -nc $http$_\"");
  21.          }
  22.    }
  23.   }
  24. }
  25. print "OVER";
  26. <STDIN>;
复制代码

作者: wfnh    时间: 2010-08-10 14:47
额···这个不算多线程吧···
作者: paktc    时间: 2010-08-10 15:13
本帖最后由 paktc 于 2010-08-10 15:15 编辑

回复 3# wfnh


    哈哈,所以我很明确的写了标题:多进程
    就是怕有人说我…… 啊 。线程这个词就高了

主要是壁纸真的不错,推荐~  :wink:
作者: ttcn_cu    时间: 2010-08-10 16:05
只用perl抓过学校BBS的plmm板块的图片,

自然类。。。

最好用perl自己的模块做吧,看老大的这个回复

http://bbs.chinaunix.net/viewthr ... ;page=1#pid10017536
作者: paktc    时间: 2010-08-10 17:23
回复 5# ttcn_cu


   原来perl自己有下载函数啊,我只学了基本操作,果然井底之蛙啊。  下班后探索探索




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2