百度知道的php爬虫

原文地址:百度知道的php爬虫 作者:好宏杰软件

<?php 

class spider 

  private $content ; 
  private $contentlen ; 
  private $BestAnswer ; 
  private $CurPosition ; 

  function GetStart( $iStart ) 
  { 
    return strpos( $this->content , '>' , $iStart )+1 ; 
  } 

  function GetContent ( $url ) 
  { 
    $this->content = file_get_contents($url); 
    $this->contentlen = strlen( $this->content ) ; 
    $start = strpos( $this->content , '<title>') ; 
    $start = $this->GetStart( $start ) ; 
    $end = strpos( $this->content , '</title>' , $start ) ; 
    $title = substr( $this->content , $start , $this->$end-$start ) ; 
    if ( strpos( $title , '_百度知道' , 1 ) < 1 ) 
    { 
      return false; 
    } 
    return ture ; 
  } 

  function GetTitle() 
  { 
    $start = strpos( $this->content , '<title>') ; 
    if ( $start > 0 ) 
    { 
      $start = $this->GetStart( $start ) ; 
      $end = strpos( $this->content , '</title>' , $start ) ; 
      $this->CurPosition = $end ; 
      return substr( $this->content , $start , $end-$start ) ; 
    } 
    return NULL ; 
  } 

  function GetQTitle() 
  { 
    $start = strpos( $this->content , 'span class="question-title"' , $this->CurPosition ) ; 
    if ( $start > 0 ) 
    { 
      $start = $this->GetStart( $start ) ; 
      $end = strpos( $this->content , '</span>' , $start ) ; 
      $this->CurPosition = $end ; 
      return substr( $this->content , $start , $end-$start ) ; 
    } 
    return NULL ; 
  } 

  function GetClassFly() 
  { 
    ; 

  } 

  function GetQContent() 
  { 
     $start = strpos( $this->content , 'pre id="question-content"' , $this->CurPosition ) ; 
     if ( $start > 0 ) 
     { 
       $start = $this->GetStart( $start ) ; 
       $end = strpos( $this->content , '</pre>' , $start ) ; 
       $this->CurPosition = $end ; 
       return substr( $this->content , $start , $end-$start ) ; 
     } 
     return NULL ; 
  } 

  function GetQsuply() 
  { 
    $start = strpos( $this->content , 'id="question-suply"' , $this->CurPosition ) ; 
    if ( $start > 0 ) 
    { 
      $start = $this->GetStart( $start ) ; 
      $end = strpos( $this->content , '</pre>' , $start ) ; 
      $this->CurPosition = $end ; 
      return substr( $this->content , $start , $end-$start ) ; 
    } 
    return NULL ; 
  } 

  function GetAnswer() 
  { 
    $start = strpos( $this->content , 'class="reply-text mb10"' , $this->CurPosition ) ; 
    if ( $start > 0 ) 
    { 
      $start = $this->GetStart( $start ) ; 
      $end = strpos( $this->content , '</pre>' , $start ) ; 
      $this->CurPosition = $end ; 
      return substr( $this->content , $start , $end-$start ) ; 
    } 
    return NULL ; 
  } 

ini_set('max_execution_time', '0'); 
$TestSpider = new spider() ; 
$Startqid = 1000001 ; 
$sndqid = 1000051 ; 
$standurl = 'http://zhidao.baidu.com/question/' ; 
$html = '.html' ; 
$url ; 
$NoUse = 0 ; 

function microtime_float() 

  list($usec, $sec) = explode(" ", microtime()); 
  return ((float)$usec + (float)$sec); 

$time_start = microtime_float(); 
$answer ; 
for ($i = $Startqid ; $i < $sndqid ; $i++ ) 

  $url = $standurl.$i.$html ; 
  if ( $TestSpider->GetContent ( $url ) ) 
  { 
    echo '<br>正在爬取编号为'.$i.'的网页<br>' ; 
    $TestSpider->GetTitle() ; //得到网页标题,不用显示了 
    echo '<font color="green">问题:</font><font color="red"><a target="_blank" href="'.$url.'"> '.$TestSpider->GetQTitle().'</a></font><br>' ; //得到问题题目 
    echo '<font color="green">问题具体内容:</font>'.$TestSpider->GetQContent().'</font><br>' ; //得到问题内容,有可能不存在 
    echo '<font color="green">问题补充说明:</font>'.$TestSpider->GetQsuply().'</font><br>' ; //问题补充说明,有可能不存在 
    while ( ($answer = $TestSpider->GetAnswer()) != NULL )  
    { 
      echo '<font color="green">问题答案:</font>'.$answer.'</font><br>' ; //得到答案。有可能没有答案! 
    } 
    ob_flush() ; 
    flush() ; 
  } 
  else 
  { 
    echo '<p>错误了<a target="_blank" href="'.$url.'" style= "color:#ff0000">'.$url.'</a></p>' ; 
    $NoUse++ ; 
  } 

$time_end = microtime_float(); 
$time = $time_end - $time_start; 
$i = $i-$Startqid ; 
echo '<p>爬取'.$i.'个网页用时'.$time.'秒</p>其中跳过'.$NoUse.'个无效网页!' ; 

?>

转载于:https://www.cnblogs.com/stevin-john/p/4768934.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值