php爬虫教程(五)提高爬虫抓取效率

之前有一次抓取x浪图片库的时候200w图片跑了一整天的时间,

后来采取多进程抓取提高了很高的效率。

多进程的实现可以参考这个方法:

http://blog.csdn.net/u014017080/article/details/46925725

主进程文件--调用子进程 每一个分类对应单独的一个进程 并发抓取

<?php  
set_time_limit(0);  
$arr = array(  
//      7,  //生活百科  
//      6,  //经典语录  
//      3,  //幽默搞笑  
//      25, //创意无限  
//      23, //萌宠动物  
//      20, //心里测试  
//      8,  //时尚潮流  
//      68, //内涵漫画  
//      4,  //星座物语  
//      22, //时尚家居  
//      17, //小说故事  
//      5,  //美食工厂  
   
        24,  //生活百科  
        19,  //经典语录  
        88,  //幽默搞笑  
        57, //创意无限  
        1, //萌宠动物  
        2, //心里测试  
        43,  //时尚潮流  
        32, //内涵漫画  
        97,  //星座物语  
   
        );  
foreach($arr as $v){  
    //echo '/usr/local/php/bin/php get_wbcontent_ppcc.php '.$v.' > /dev/null 2>&1 &'."\n";  
    exec('/usr/local/php/bin/php get_wbcontent_ppcc.php '.$v.' > /dev/null 2>&1 &');  
    sleep(1);  
}  

 

子进程实现具体的抓取功能

<?php  
$client = Load::lib('client');  
$client->setTimeout(10);  
$client->debug(0);  
//这里是本打算挂的代理 后来发现不太稳定就不用了  
  
 //$arr = array(  
//      7=>'221.176.14.72::80',  //生活百科  
//      6=>'222.39.112.12::8118',  //经典语录  
//      3=>'115.182.83.38::8080',  //幽默搞笑  
//      25=>'180.97.185.35::10001', //创意无限  
//      23=>'119.187.148.35::80', //萌宠动物  
//      20=>'111.206.10.13::80', //心里测试  
//      8=>'124.65.163.10::8080',  //时尚潮流  
//      68=>'122.70.178.226::8118', //内涵漫画  
//      4=>'120.199.20.238::8080',  //星座物语  
//      22=>'111.206.10.20::80', //时尚家居  
//      17=>'183.207.228.11::86', //小说故事  
//      5=>'120.203.158.149::8118',  //美食工厂  
//      );  
//$client->setProxy($arr[$argv[1]]);  
//$client->setProxy('106.2.185.130:33311');  
$base_url = "http://t.xx.cc/";  
for($i=1;$i>0;$i++)  
{  
    $retry = 4;  
    while(--$retry)  
    {  
        sleep(5);  
        $url = 'http://t.xxx.cc/time/index.php?mod=library&action=show&account='.$uid.'&random='.rand(1,1000).'&tid='.$argv[1].'&page='.$i.'&keyword=&do=&offset=20';  
        try{  
            $c = $client->get($url);  
            $r = json_decode($c,'array');  
            break;  
        }catch(except $e){  
            continue;  
        }  
    }  
    if(!empty($r['html']))  
    {  
        //写入操作  
        }  
    }else{  
         die;  
    }  
}

总结:大致就是这个样子,具体的实现大家可以发挥自己的想象力。

我只是给大家提供一个参考而已。

谢谢读到这里。

 

原文链接:https://blog.csdn.net/u014017080/article/details/52369761

点赞