Home > Backend Development > PHP Tutorial > 关于网络爬虫效率的有关问题

关于网络爬虫效率的有关问题

WBOY
Release: 2016-06-13 13:26:36
Original
1028 people have browsed it

关于网络爬虫效率的问题
我自己写的一个网络爬虫,提取一个网站中的链接,但是运行起来特别的慢,而且一段时间后会出现网络问题,我的另外一个对链接的处理的程序就没有问题,二者都是串行的,求帮助,谢谢
下面的代码:

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?PHP //网络爬虫
include_once('Snoopy.class.php');

$spider = new Snoopy();
$spider->begin_url="http://blog.csdn.net/";

_spider($spider->begin_url);
print_r($spider->array_article);

function _spider($url){

    global $spider;

   $file="url.txt";
   $fp=fopen($file,"a+");
   $array_file=file($file);

    $array = get_headers($url,1);
   if(preg_match('/200/',$array[0])){//判断网页是否能正常访问

    $spider->fetch($url);   //抓取完整的网页
    $spider->spider_text=$spider->results;

    $spider->fetchlinks($url);  //提取网页中的链接
    $array_links=$spider->results;

     $array_url=array();  //定义一个放url的数组,如果有重复的则舍弃,不重复的就添加
     if(is_array($array_links)){
           foreach($array_links as $value){
               $is_match=strstr($value,'blog.csdn.net');   
               $is_match1=strstr($value,'#'); 
               $is_match2=strstr($value,'@');
        
               if($is_match!=false&&$is_match1==false&&$is_match2==false){        //如果链接是这个博客站的,导入文本中,否则不进行处理
                     $arr=explode(" ",$value);
                     $_value=$arr[0];

                if(in_array($_value,$array_url)==false){
                      $array_url[]=$_value;
                     }
        
        }
    }  
}

//print_r($array_url);
    
    foreach($array_url as $value2){
            $array2 = get_headers($value2,1);
           if(preg_match('/200/',$array2[0])){


        $is_match=strstr($value2,'/article/details/');
        
        if($is_match!=false){
            if(in_array($value2,$spider->array_article)==false){
                static $num=1;
                echo $num."...:".$value2."<br>";
                $num=$num+1;
                $_value2=$value2."\r\n";
            
            if(in_array($value2,$array_file)==false){
                $spider->array_article[]=$value2;
            fwrite($fp,$_value2);
            }

            if(count($spider->array_article)>10000){
                break;
            
            }

        }
        }    
                             else{
                              if(in_array($value2,$spider->array_category)==false){
                                  $spider->array_category[]=$value2;
                                  _spider($value2);
                                           }
        
                                   }    
    }
}    
}
}

//echo get_magic_quotes_gpc();

    
?>
Copy after login


------解决方案--------------------
这个我推荐用curl...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template