ホームページ > php教程 > php手册 > Baidu は PHP クローラーを知っています

Baidu は PHP クローラーを知っています

WBOY
リリース: 2016-06-21 08:52:28
オリジナル
775 人が閲覧しました

/*
Baidu はクローラーを知っています!
分析の結果、Baidu は静的な Web ページで構成されていることがわかりました。 URL 形式は主に http://zhidao.baidu.com/question/(number).html で、番号は質問の番号 (PID) であり、削除により 1 つずつ番号が付けられます。質問や何らかの理由により、番号が連続していない場合があります。削除すべき問題が見つかった場合は、その問題をスキップして続行できます。
*/


クラススパイダー
{
 プライベート $content ;
 プライベート $contentlen ;
 プライベート $BestAnswer ;
 プライベート $CurPosition ;
 関数 GetStart( $iStart )
 {
  return strpos( $this->content , '>' , $iStart )+1 ;
 }
 関数 GetContent ( $url )
 {
  $this->content = file_get_contents($url);
  $this->contentlen = strlen( $this->content ) ;
  $start = strpos( $this->content , '') ;<br>   $start = $this->GetStart( $start ) ;<br>   $end = strpos( $this->content , '' , $start ) ;
  $title = substr( $this->content , $start , $this->$end-$start ) ;
  if ( strpos( $title , '_百度知道' , 1 )   {
   false を返します;
  }
  戻ります;
 }
 
 関数 GetTitle()
 {
  $start = strpos( $this->content , '') ;<br>   if ( $start > 0 )<br>   {<br>    $start = $this->GetStart( $start ) ;<br>    $end = strpos( $this->content , '' , $start ) ;
   $this->CurPosition = $end ;
   return substr( $this->content , $start , $end-$start ) ;
  }
  NULL を返します ;
 }
 関数 GetQTitle()
 {
  $start = strpos( $this->content , 'span class="question-title"' , $this->CurPosition ) ;
  if ( $start > 0 )
  {
   $start = $this->GetStart( $start ) ;
   $end = strpos( $this->content , '' , $start ) ;
   $this->CurPosition = $end ;
   return substr( $this->content , $start , $end-$start ) ;
  }
  NULL を返します ;
 }
 関数 GetClassFly()
 {
  ;
 }
 関数 GetQContent()
 {
  $start = strpos( $this->content , 'pre id="question-content"' , $this->CurPosition ) ;
  if ( $start > 0 )
  {
   $start = $this->GetStart( $start ) ;
   $end = strpos( $this->content , '' , $start ) ;
   $this->CurPosition = $end ;
   return substr( $this->content , $start , $end-$start ) ;
  }
  NULL を返します ;
 }
 関数 GetQsuly()
 {
  $start = strpos( $this->content , 'id="question-suply"' , $this->CurPosition ) ;
  if ( $start > 0 )
  {
   $start = $this->GetStart( $start ) ;
   $end = strpos( $this->content , '' , $start ) ;
   $this->CurPosition = $end ;
   return substr( $this->content , $start , $end-$start ) ;
  }
  NULL を返します ;
 }
 関数 GetAnswer()
 {
  $start = strpos( $this->content , 'class="reply-text mb10"' , $this->CurPosition ) ;
  if ( $start > 0 )
  {
   $start = $this->GetStart( $start ) ;
   $end = strpos( $this->content , '' , $start ) ;
   $this->CurPosition = $end ;
   return substr( $this->content , $start , $end-$start ) ;
  }
  NULL を返します ;
 }
}
ini_set('最大実行時間', '0');
$TestSpider = 新しいスパイダー() ;
$Startqid = 1000001 ;
$sndqid = 1000051 ;
$standurl = 'http://zhidao.baidu.com/question/' ;
$html = '.html' ;
$url ;
$NoUse = 0 ;
関数 microtime_float()
{
    list($usec, $sec) =explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
$answer ;
for ($i = $Startqid ; $i {
 $url = $standurl.$i.$html ;
if ( $TestSpider->GetContent ( $url ) )
{
echo '
番号が「.$i.'」の Web ページをクロールします
' ;
$TestSpider->GetTitle(); // Web ページのタイトルを取得します。表示する必要はありません
echo '質問: .$TestSpider->GetQTitle().'
' //質問のタイトルを取得します
echo '質問の具体的な内容: '.$TestSpider->GetQContent().'
' ;質問の内容は、存在しない可能性があります
echo ' 問題の追加説明: '.$TestSpider->GetQsuply().'
'問題は存在しない可能性があります
while ( ($answer = $TestSpider->GetAnswer()) != NULL )
{
Echo '質問の答え: '.$answer.'
' ;答えはないかも知れません!
}
ob_flush() ;
フラッシュ() ;
}
それ以外
{
echo '

エラー'.$url.' ' ;
$NoUse++ ;
}
}
$time_end = microtime_float();
$time = $time_end - $time_start;
$i = $i-$Startqid ;
echo '

'.$i.' の Web ページをクロールするのに '.$time.' 秒かかりました

無効な Web ページはスキップされました。 ' ;

?>



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