免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 墨迹哥
打印 上一主题 下一主题

Perl爬虫,爬整站研究 [复制链接]

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
21 [报告]
发表于 2013-06-03 09:11 |只看该作者
本帖最后由 mcshell 于 2013-06-03 09:12 编辑

回复 13# 墨迹哥


    最近在搞oracle{:3_186:}    和系统自动化{:3_186:}

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
22 [报告]
发表于 2013-06-03 09:19 |只看该作者
回复 21# mcshell


    这两个都是运维的玩意啊。。你怎么跑运维的方向去了?。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
23 [报告]
发表于 2013-06-03 09:27 |只看该作者
回复 22# 墨迹哥


    偶一直都是搞运维的{:3_186:}

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
24 [报告]
发表于 2013-06-03 09:32 |只看该作者
回复 20# 墨迹哥
没见到你讲超出容量的帖子,那个地方指出超出了容量?


   

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
25
发表于 2013-06-03 09:37
回复 18# 墨迹哥

我的这两个变量就是排除非目标站点,还有排除各种分页用的
$base_url ;@exclude

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
26 [报告]
发表于 2013-06-03 09:38 |只看该作者
回复 23# mcshell


哈哈!你的签名图片终于不动了 哈哈,

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
27 [报告]
发表于 2013-06-03 09:39 |只看该作者
本帖最后由 grshrd49 于 2013-06-03 09:44 编辑

论坛徽章:
0
28 [报告]
发表于 2013-06-03 10:16 |只看该作者
回复 6# yakczh_cu


    => 貌似和 , 是等价的吧:wink: 小骆驼刚学

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
29 [报告]
发表于 2013-06-03 10:23 |只看该作者
回复 24# iakuf


    14楼的回复。。。{:2_180:}

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
30 [报告]
发表于 2013-06-03 10:24 |只看该作者
回复 17# grshrd49


    在网上找了一段,感觉这个貌似跟我想法有重叠。
    目前还在分析和整理。。- - ! 蛋腾了。你也来看看这个,看有什么可以借鉴的?
  1. #!/usr/bin/perl

  2. use URI;
  3. use LWP;

  4. open(GC,">process.txt") || die "$!\n";
  5. print GC "PROCESS:\n";
  6. close (GC);
  7. my $t1=time();
  8. my $mainweb = $ARGV[0];      #首页地址
  9. my $deep=3;         #爬虫深度
  10. my $report;         #生成报告
  11. %hashurls=();        #储存url的深度
  12. @allurls=();        #所有url列表
  13. %hashtwo=();        #记录网页对应文件

  14. $hashurls{$mainweb}=1;
  15. $allurls[0]=$mainweb;
  16. $hashtwo{$mainweb}=0;
  17. my $i=1;         #数组allurls的长度
  18. my $j=0;         #爬下的网页文件的个数
  19. my $k=1;         #记录网页对应文件的参数
  20. my $suc=0;         #成功爬下网页数量
  21. my $fai=0;         #失败网页数量
  22. my $dom;         #域名

  23. print "mainweb=".$mainweb."\n";
  24. if( $mainweb =~ /http:\/\/www.([^\/\s]{1,500})/i ){
  25.         $dom=$1;        #域名
  26.         print "domain is: ".$dom."\n";
  27.         $report = $report."mainweb=".$mainweb."\n";
  28.         $report = $report."domain is: ".$dom."\n";
  29. }
  30. else {
  31.         print "wrong input\n";
  32.         exit;
  33. }

  34. my $agent=LWP::UserAgent->new();
  35. $agent->agent("zzq spider");
  36. $agent->timeout(5);

  37. #按数组allurls的顺序爬网页
  38. foreach $u(@allurls){
  39.         my $ret = &getweb($u);
  40.         open(FD,">web/web".$j.".html") || die "$!\n";
  41.         print FD "$ret\n";
  42.         close(FD);
  43.         $j++;
  44. if($hashurls{$u}<$deep){
  45.    &geturls($ret,$dom,$hashurls{$u},$u);
  46. }
  47. }

  48. print "Finished!\n";
  49. open(GC,">>process.txt") || die "$!\n";
  50. print GC "Finished!\n";
  51. close (GC);

  52. #输出报告
  53. my $t2=time();
  54. my $costtime=$t2-$t1;
  55. my $ti1=localtime($t1);
  56. my $ti2=localtime($t2);
  57. print "\n\n\n\n\nreport:\n";
  58. $report = $report."start time = ".$ti1."\tfinish time = ".$ti2."\n";
  59. $report = $report."Costtime = ".$costtime." seconds\n";
  60. $report = $report."get ".$j." webs\tsuccess : ".$suc."\tfail : ".$fai."\n";
  61. foreach $ur(@allurls){
  62. $report = $report.$ur."\n ======> web".$hashtwo{$ur}.".html\n"
  63. }
  64. print "$report";
  65. open(BG,">report.txt") || die "$!\n";
  66. print BG "$report";
  67. close (BG);
  68. print "You can read this report in report.txt\n";


  69. #get the urls form the web.
  70. sub geturls{
  71. my ($ret,$domain,$tmpdeep,$webu) = @_;
  72. # print "now start geturls\n";
  73. while( $ret =~ /href=\"([^\"\?\s>]{1,500})\"/ig )
  74. {
  75.    my $realurl = URI->new_abs( $1, $webu );
  76.    if($realurl =~ /$domain/){
  77.     if(defined $hashurls{$realurl}){
  78.      next;
  79.     }
  80.     else {
  81.      print "get a new url:$realurl\n";
  82.      open(GC,">>process.txt") || die "$!\n";
  83.      print GC "get a new url:$realurl\n";
  84.      close (GC);
  85.      $hashurls{$realurl} = $tmpdeep+1;
  86.      $allurls[$i] = $realurl;
  87.      $hashtwo{$realurl} = $k;
  88.      $k++;
  89.      $i++;
  90.     }
  91.    }
  92.    else {
  93.     next;
  94.    }
  95. }

  96. while( $ret =~ /href=\'([^\'\?\s>]{1,500})\'/ig )
  97. {
  98.    my $realurl = URI->new_abs( $1, $webu );
  99.    if($realurl =~ /$domain/){
  100.     if(defined $hashurls{$realurl}){
  101.      next;
  102.     }
  103.     else {
  104.      print "get a new url:$realurl\n";
  105.      open(GC,">>process.txt") || die "$!\n";
  106.      print GC "get a new url:$realurl\n";
  107.      close (GC);
  108.      $hashurls{$realurl} = $tmpdeep+1;
  109.      $allurls[$i] = $realurl;
  110.      $hashtwo{$realurl} = $k;
  111.      $k++;
  112.      $i++;
  113.     }
  114.    }
  115.    else {
  116.     next;
  117.    }
  118. }

  119. while( $ret =~ /href=([^\"\?\'\s>]{1,500})/ig )
  120. {
  121.    my $realurl = URI->new_abs( $1, $webu );
  122.    if($realurl =~ /$domain/){
  123.     if(defined $hashurls{$realurl}){
  124.      next;
  125.     }
  126.     else {
  127.      print "get a new url:$realurl\n";
  128.      open(GC,">>process.txt") || die "$!\n";
  129.      print GC "get a new url:$realurl\n";
  130.      close (GC);
  131.      $hashurls{$realurl} = $tmpdeep+1;
  132.      $allurls[$i] = $realurl;
  133.      $hashtwo{$realurl} = $k;
  134.      $k++;
  135.      $i++;
  136.     }
  137.    }
  138.    else {
  139.     next;
  140.    }
  141. }
  142. while( $ret =~ /window\.open\(\'([^\'\?\s>]{1,500})/ig )
  143. {
  144.    my $realurl = URI->new_abs( $1, $webu );
  145.    if($realurl =~ /$domain/){
  146.     if(defined $hashurls{$realurl}){
  147.      next;
  148.     }
  149.     else {
  150.      print "get a new url:$realurl\n";
  151.      open(GC,">>process.txt") || die "$!\n";
  152.      print GC "get a new url:$realurl\n";
  153.      close (GC);
  154.      $hashurls{$realurl} = $tmpdeep+1;
  155.      $allurls[$i] = $realurl;
  156.      $hashtwo{$realurl} = $k;
  157.      $k++;
  158.      $i++;
  159.     }
  160.    }
  161.    else {
  162.     next;
  163.    }
  164. }
  165. }


  166. #get a web form internet
  167. sub getweb
  168. {
  169. my ($u) = @_;
  170. my $h=$j+1;
  171. print "webaddress: " . $u . "\n";
  172. print "getting the ".$h." th web of $i in total\n";
  173. open(GC,">>process.txt") || die "$!\n";
  174. print GC "webaddress: " . $u . "\n";
  175. print GC "getting the ".$h." th web of $i in total\n";
  176. close (GC);
  177. my $request=HTTP::Request->new(GET,$u);
  178. my $response=$agent->request($request);
  179. if ($response->is_success){
  180.    print "successed!\n";
  181.    open(GC,">>process.txt") || die "$!\n";
  182.    print GC "successed!\n";
  183.    close (GC);
  184.    $suc++;
  185.    return $response->content;
  186. }
  187. else{
  188.    print "failed! Status = ".$response->status_line."\n";
  189.    open(GC,">>process.txt") || die "$!\n";
  190.    print GC "failed! Status = ".$response->status_line."\n";
  191.    close (GC);
  192.    $fai++;
  193.    return $response->status_line;
  194. }
  195. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP