DEBUG

码农一枚

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
文章标签: php 脚本 爬虫
个人分类: php
上一篇php爬虫教程(四)抓取数据并进行处理
下一篇php消息队列的应用
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭