ホームページ >バックエンド開発 >PHPチュートリアル >关于网络爬虫效率的有关问题

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

WBOY
WBOYオリジナル
2016-06-13 10:29:07825ブラウズ

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

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();    ?>


------解决方案--------------------
这个我推荐用curl...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。