现在在一个页面上进行for($u=1;$u<40;$u++){
 这样子去循环采集 
如果采集非常慢 循环次数特别多 那么会造成超时现象吗?一般采集是个什么思路

解决方案 »

  1.   

    肯定会超时的,采集的时候分阶段采集吧,然后set_time_out()函数把服务器响应时间设置的长些,以保证信息能有足够的时间采集完
      

  2.   

    像你这种情况应该使用多线程采集 ,给你个多线程采集的function
    function newfuc($doctorz)
        {
        $mh = curl_multi_init(); 
        foreach ($doctorz as $j => $uri) { 
    $conn[$j] = curl_init($uri); 
    curl_setopt($conn[$j], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); 
    curl_setopt($conn[$j], CURLOPT_HEADER ,0); 
    curl_setopt($conn[$j], CURLOPT_CONNECTTIMEOUT,60); 
    curl_setopt($conn[$j],CURLOPT_RETURNTRANSFER,true); // 设置不将爬取代码写到浏览器,而是转化为字符串
    curl_multi_add_handle ($mh,$conn[$j]); 

    do { 
    curl_multi_exec($mh,$active); 
    } while ($active);foreach ($doctorz as $j => $uri) { 
    $data[$j]= curl_multi_getcontent($conn[$j]); // 获得爬取的代码字符串 
    //echo $data[$j];
    //注意各个数据源源码的编码必须一致
    }
    return $data;
    }
    先把要采集的网址装入数组,然后再放到函数里
      

  3.   

    好吧,我給你一个简单的不会超时的思路吧假如你的采集工作都是在a.php里完成的,那么a.php的代码条例应该如下:1.$id=獲取傳遞過來的id值,如果獲取不到,則id值為0
    2.从数据库里按照id正序方式取得一條id大於$id的網址数据出來采集
    3.实施采集工作
    4.采集完成之后把采集到的内容存入数据库.
    5.让$id的值加1
    6.延时更新自身页面,并传递参数,可以用下边两种方法任選其一
    window.setTimeout(function(){location.href='a.php?id=<?PHP echo $id;?>'},1000);//只延迟1秒,不循环
    <meta HTTP-EQUIV=REFRESH CONTENT='60; URL=a.php?id=<?PHP echo $id;?>'>这样的思路写出来的采集,不管你要采集多少条数据,绝对永不超时.