ホームページ > バックエンド開発 > PHPチュートリアル > Web クローラーの効率に関する質問

Web クローラーの効率に関する質問

WBOY
リリース: 2016-06-13 13:26:36
オリジナル
1029 人が閲覧しました

Web クローラーの効率について
Web クローラーを自分で作成して Web サイトからリンクを抽出しましたが、動作が非常に遅く、しばらくするとネットワークの問題が発生します。リンクを処理する別のプログラムがありますが、問題はありません。どちらもシリアルです。助けてください、ありがとうございます
次のコード:

PHP コード
<!--

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

    
?>
ログイン後にコピー


------解決済みの解決策------ --------------
これにはカールを使用することをお勧めします...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート