写了一个采集程序  但是采集的时候总是采集不全  比如目标网站更新了10条数据 我采集过来的只有3-5条(写的正则表达式都可以匹配这10条数据的)而且经常在采集过程中出现502错误 我用的是Nginx+php+mysql
采集的过程是这样的:
循环本站的一个栏目下的文章  比如有100篇
根据这一百篇的id 去目标网站找相关的文章
把这写相关的文章 插入到我网站的数据库程序 用到了4个while循环 
我认为出现爬取不完全的现象 是因为服务器在处理这个程序的时候  因为执行时间太长 所以没有全部爬过来  大家有没有其他的看法 请高手指点

解决方案 »

  1.   

    wiki_categorylinkid  did(doc表的did)  cid(category表的cid)wiki_category
    cid  name(栏目名称)  navigation(描述) wiki_doc
    did   title(文章标题)  conent(文章内容)
    function docate(){
    $docs=array();
    $query=$this->db->query("SELECT * FROM wiki_categorylink as a WHERE a.cid=71"); //得到一个栏目下所有的文章 cid为栏目编号
     while($row=$this->db->fetch_array($query)){
        $sql="SELECT title FROM wiki_doc WHERE did=".$row['did'];  //根据得到的没个did 去查询每个文章
        $query2 =$this->db->query($sql);
        while($row2=$this->db->fetch_array($query2)){
                          preg_match("/[A-Z|\/]*?[\d|.]*?\-\d{4}/",$row2['title'], $match);
    $row2['title']=$match[0]; //对每个文章标题进行处理 处理后的标题可以用于 目标网站的查询
    $str=urlencode($row2['title']);
    $url="http://www.XXXX.com/s.jsp?keyword=".$str;
    $stream = fopen($url, 'r');
    $html=stream_get_contents($stream);
    preg_match_all('~onclick="mClk\((.*?)\);"~is',$html,$data);
    fclose($stream);//第一次查询 得到目标网站栏目页
    $url2="http://www.XXX.com/detail/".$data[1][0].".html";
    $stream2 = fopen($url2, 'r');
    $html2=stream_get_contents($stream2);
    $html2 = iconv("gbk", "utf-8//IGNORE",$html2);
    preg_match_all("~<b>>></b><a href=(.*?) target='_blank'>(.*?)</a><b>>></b><a href=(.*?) target='_blank'>(.*?)</a>~is",$html2,$data2);
    $cate=preg_replace("/[A-Z|0-9]{1,2}(.*?)/i","\\1",$data2[4][0]);
    fclose($stream2);//进入栏目页 获得需要的内容
    if($cate){
    $query3=$this->db->query("SELECT * from wiki_category where name like '%".$cate."%' and navigation like '%SN%'");
    $num =$this->db->num_rows($query3); 
    if($num==1){
    while($row3=$this->db->fetch_array($query3)){
    print_r($row['did'].'ok');
    $this->db->query("UPDATE wiki_categorylink SET cid=".$row3['cid']." WHERE did=".$row['did']);//更新数据库
        }
        }
            }
         }
    }

    }
      

  2.   

    这是一篇被加精的文章,你看看吧.share一段采集程序的代码,顺便散分
    http://topic.csdn.net/u/20080824/07/0125890f-9a98-4296-ad84-c5c748c17581.html
      

  3.   

    set_time_limite(0)         这样行不!?