免费注册 查看新帖 |

Chinaunix

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

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

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


    对的,我没有理解透,那天自己研究了一晚上,也没理解出来。。

    感觉好像有点偏差,这几天修复完代码我就开始细的测试,看看到底是什么地方没理解。

    目前大概知道的情况是,use threads; use threads::shared;这两个包我已经理解了。
  
    这个use Thread::Semaphore;信号量的我也知道怎么回事了。

    目前就use Bloom::Filter;还有这个use Thread:ueue; 理解有点吃力。

    不知道有没有什么好多的方法?还真想请教下。劳烦你点播下。谢谢啦

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


    不需要过度的去做太多的东西,只需要能够爬出就好。

     因为测试的话,主要测的是漏洞。后续会把样本和规则放在INI配置里面,用于测试使用。

     现在主要的问题就是爬虫了。能把页面的URL全部爬下来,那就基本上没有太大的问题。

     主要问题还是在不同深度上。

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


    我觉得把,还是优化基础功能先,别琢磨别的了。
   
    基础功能实现以后才能扩展,一步一脚印的走比较好。你觉得呢。。。。

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

回复 73# 墨迹哥


是这样的!如果一个功能都无法正常的运行 ,谈什么优化呢
我刚刚改了我的脚本 findpageurl 这个函数我把发现的相对路径的url的处理方法加了个判断
  1. ###################################
  2. #请求url从返回页面中获取有用的url
  3. ###################################
  4. sub findpageurl{
  5.         my ($rooturl,$url,$base_url,$a) = @_;
  6.         my @exclude = @$a;
  7.         my $UA = LWP::UserAgent->new();
  8.         $UA->max_redirect(1);        #控制重定向深度
  9.         my $req = HTTP::Request->new( GET => "$url" );
  10.         my $resp = $UA->request($req);
  11.         #$UA->timeout(10);
  12.         my @page;
  13.         my @hrefurl;
  14.         my @srcurl;
  15.         my $return_code;
  16.         my $tempurl;

  17.         #链接不是200返回错误代码
  18.         $return_code = $resp->code;
  19.         print "requset return code:$return_code\n";
  20.         return $return_code unless ($return_code == 200);
  21.         @page = split /\n/,$resp->content;

  22.         for(@page){
  23.                 if(s/href="(.+?)"//g){
  24.                         #print "$1\n";
  25.                         $tempurl = $1;
  26.                         #这里改了.判断非http开头的相对路径地址,组装上根域名,如果不是/开头的再加上组装上/
  27.                         unless($tempurl =~ /^http/){
  28.                                 if($tempurl =~ /^\//){
  29.                                         $tempurl = $rooturl . $tempurl;
  30.                                 }else{
  31.                                         $tempurl = $rooturl ."\/". $tempurl;
  32.                                 }
  33.                         }
  34.                         next if (map {$tempurl=~/$_/i} @exclude);
  35.                         substr($tempurl,-1) =~ s/\///;        #移除url最后的 /
  36.                         push @hrefurl,$tempurl;
  37.                 }
  38.                 push @srcurl,$1 if(/src="(.*?)"/g);
  39.         }
  40.         print "requset return url\n";
  41.         return @hrefurl;
  42. }
复制代码

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
75 [报告]
发表于 2013-07-10 13:39 |只看该作者
本帖最后由 laputa73 于 2013-07-10 13:44 编辑

queue从字面看就是队列,fifo,你的分析程序往队列里面放,爬虫程序从队列里面拿目标.
至于bloom::filter,那就是个高效的过滤器,仙子和iakuf的帖子有详细解释
其实就是判定你分析出来的url是否是重复的,你用hash当然也可以,但是bloom:filter占用资源小很多
所以就是每分析得到一个url,先用filter检查,如果是新的,就add到filter,同时enqueue
爬虫线程主要从queue里面dequeue然后爬就好了

这个无非都是为了效率.
你要是不考虑效率,把分析结果入mysql,爬虫从mysql里面去拿
这样是否更好理解?但是性能就差很多.


话说,你为啥不试试anyevent?
用py的话说
cobrawgl 发表于 2012-05-09 13:20
用 AnyEvent::HTTP 做爬虫可真不错
别的不敢说,做爬虫,肯定是Coro + AnyEvent::HTTP,性能和内存使用好到你不信,呵呵

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
76 [报告]
发表于 2013-07-10 13:59 |只看该作者
本帖最后由 grshrd49 于 2013-07-10 14:01 编辑
laputa73 发表于 2013-07-10 12:25
回复 64# 墨迹哥


http://bbs.chinaunix.net/forum.p ... st%3D1%26digest%3D1
我刚刚测试这个爬虫!这个是什么情况呀 我4g内存就溢出了啊?

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
77 [报告]
发表于 2013-07-10 14:29 |只看该作者
hao123的链接太多,可能会把queue撑爆?那个程序没有控制数量.而且windows下的thread感觉也不靠谱.

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


    重点我不会啊。。。求例子分享。。另外问个题外话,8月大会你来不来?一起吃个饭HAPPY下?{:2_178:}

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


    你用的是云总那个爬虫把。。有问题的。那个爬虫,这个也是我当时说的问题。

    URL数量一旦超过定义的数值,直接就成这样了。。到现在都没有解决的办法。所以,骚年,你放弃这个脚本吧。

    但是云总的代码里还是有学习的价值。可以临摹下。

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


    八月来北京否啊?= =  最近工作忙碌。没啥时间上论坛,到现在才看到你发的回复。。 = =# 骚瑞。。

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP