关闭

[置顶] php爬虫教程(五)提高爬虫抓取效率

标签: php脚本爬虫
1521人阅读 评论(2) 收藏 举报
分类:

之前有一次抓取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;
    }
}
 
 

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

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

谢谢读到这里。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34143次
    • 积分:829
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:3篇
    • 译文:0篇
    • 评论:22条
    最新评论