ホームページ >php教程 >php手册 >Web コンテンツをクロールする

Web コンテンツをクロールする

WBOY
WBOYオリジナル
2016-06-21 09:05:18894ブラウズ

网页

class Thief{
// 需要得到数据的网址
var $URL;
// 需要分析的开始标记
var $startFlag;
//需要分析的结束标记
var $endFlag;
//存储图片的路径
var $saveImagePath;
//访问图片的路径
var $imageURL;
// 列表内容
var $ListContent;
//需要获得的图片路径
var $ImageList;
//存储的图片名称
var $FileName;

/**
* 得到页面内容
* @return String 列表页面内容
*/

function getPageContent ()
{
$pageContent = @file_get_contents( $this->URL );
  
   return $pageContent;
  }
 
 
  /**
  * 根据标记得到列表段
  * @param $content  页面源数据
  * @return String   列表段内容
  */
 
  function getContentPiece ( $content )
  {
   $content = $this->getContent( $content, $this->startFlag, $this->endFlag );
                                                     if(!$content)  $content=$this->cut ($content, $this->startFlag, $this->endFlag );
   return $content;
  }
 
 
  /**
  * 得到一个字符串中的某一部分
  * @param $sourceStr 源数据
  * @param $startStr 分离部分的开始标记
  * @param $endStart 分离部分的结束标记
  * @return boolean  操作成功返回true
  */
 
  function getContent ( $sourceStr, $startStr, $endStart )
  {
   $s = preg_quote( decode( $startStr ) );
   $e = preg_quote( decode( $endStart ) );
   $s = str_replace( " ", "[[:space:]]", $s );
   $e = str_replace( " ", "[[:space:]]", $e );
   $s = str_replace( "\r\n", "[[:cntrl:]]", $s );
   $e = str_replace( "\r\n", "[[:cntrl:]]", $e );

   preg_match_all( "@" . $s . "(.*?)". $e ."@is", $sourceStr, $tpl );

   $content = $tpl[1];
   $content = implode( "", $content );
   return $content;
  }
 
  function cut ( $sourceStr, $startStr, $endStr )
  {
                                                return  cut( $sourceStr ,decode( $startStr )  ,decode( $endStr) );
                                    }
 
  /**
  * 得到只含有连接和内容的列表数组
  * @param $sList  页面列表源数据
  * @return array  列表段内容
  */
 
  function getSourceList ( $sList )
  {
   preg_match_all( "//i", $sList, $list );

   $list = $list[0];
//foreach($list as $l) echo $l;
                                                     if(!$list || !is_array($list)){
                                                                   return $this->getSourceListExtend($sList);
                                                     }else{
                                   return $this->getList ( $list );
                                                     }
                                                    
  }
 
                                   function getSourceListExtend($sList)
                                   {
                                                  $content=explode("",$sList);
                                                  for($i=0;$i {
$lists=explode(" $list[]=$lists[1];
}

return $this->GetListExtend( $list );
                                   }
 
  /**
  * 得到列表内容
  * @param $list  列表段内容
  * @return array  含有标题和连接的数组
  */
 
  function getList ( $list )
  {
   for ( $i = 0; $i < count( $list ); $i++ )
{
//title
preg_match_all( "/>(.*?)<\/a>/i", $list[$i], $templ );

    //content
    preg_match_all( "/href=(\"|'|)(.*?)(\"|'|)/i", $list[$i], $tempc );
   
    //获取的数据正确
    if( !empty( $templ[1][0] ) && !empty( $tempc[2][0] ) )
    {
     if( 0 == strpos( $tempc[2][0], "/" ) )
     {
      preg_match( "@http://(.*?)/@i", $this->URL, $url );
      $tempc[2][0] = substr( $url[0], 0, strlen( $url[0] ) - 1 ) . $tempc[2][0];
     }
    
     $listContent[$i][0] = $templ[1][0];
      $listContent[$i][1] = $tempc[2][0];
    }
                                                     }
                                                     if(!$listContent || !is_array($listContent)){
                                                               return $this->GetListExtend ( $list );
                                                     }else{
             return $listContent;
                                                     }
  }

関数getListextend($ list)
{
$ list = str_replace( "" "" "" "" ""、 "、$ list);
$ list = str_replace(" '"、"、 "、$ list); $ list = str_replace( "=","",$list);
for ( $i = 0; $i {
//content
$temp_link=$this->cut($ list[$i],"href"," ");
echo $temp_link."
";
//title if(eregi(">",$list[$i])){
$temp_title=substr(strrchr($list[$i], ">"), 1 ); $temp_title=preg_re place( "@<(.*?)>@is","",$temp_title) ;
$temp_title=str_replace( ">","",$temp_title);
$temp_title=str_replace( "<","",$temp_title);                                                                            
                                                                              if(!$temp_title) $temp_title=$list[$i] ;
$temp_title=preg_replace(. *?)>@is","",$temp_title);
$temp_title=str_replace( "&gt;"、 ""、$ temp_title);     
echo $temp_title."
";
}else{
$temp_title=$list[$i];      
$temp_title=preg_replace( "@<(.*?)>@is","",$temp_title);
$temp_title=str_replace( ">","",$temp_title);
                                                                              $temp_title=str_replace( "<","",$temp_title); 
                                                                              echo $temp_title."
";
                                                                       }
    //获取的数据正确
    if( !empty( $temp_link ) && !empty( $temp_title) )
    {
     if( 0 == strpos( $tempc[2][0], "/" ) )
     {
      preg_match( "@http://(.*?)/@i", $this->URL, $url );
      $temp_link = substr( $url[0], 0, strlen( $url[0] ) - 1 ) . $temp_link;
     }
    
     $listContent[$i][0] = trim($temp_title);
     $listContent[$i][1] = $temp_link;
    }
                                                     }
   return $listContent;

                                   }


/**
* テキスト内の画像パス情報を取得します
* @param $content テキスト情報
* @return array 情報内の画像パスの配列
*/

function getImageList ( $content )
{
preg_match_all( "/src=("|')(.*?)("|')/i", $content, $temp );

$imageList = $temp[2];
return array_unique($imageList);
}


/**
* 画像をダウンロードするときに、ページ内のパスを新しいパスに置き換えます
* @param $content パスに置き換える必要があるページのコンテンツ
* @return String 置き換えられたページのコンテンツ
*/

function replaceImageParh ( $content )
{
for ( $ i = 0; $i < count( $this->ImageList )
{
if($this->ファイル名[$i]){
$content = str_replace( $this->ImageList [$i], $this->imageURL.$this->ファイル名[$i], $content );
}else{
//$s=" /src=(\"|')".preg_quote ($this->ImageList[$i])."(\"|')/i";
$content = str_replace($this->ImageList[$i], $GLOBALS[SET][webpath]. "images/nopic.gif", $content );
}
}

return $content;
}


/**
* 画像をダウンロードする場合、画像ファイルを読み込み、対応するパスに保存します
* @param $imageURL 読み込む画像ファイル
* @return boolean 操作が成功した場合は true を返します
*/

function saveImage ( $imageURL )
{

for ( $ i = 0; $i {
$fName = $this->saveFile( $imageURL[$i] );
if( !empty( $fName ) )
{
$filename[$i] = $fName;
}
}

return $filename;
}


function saveFile( $fileName )
{

$s_filename = basename( $fileName );
$ext_name = strto lower( strrchr( $s_filename, "." );

if( ( ".jpg" && ".gif" && ".swf" ) != strto lower( $ext_name ) )
{
return "";
}


if( 0 == strpos( $fileName, "/ " ) )
{
preg_match( "@http://(.*?)/@i", $this->URL, $url );
$url = $url[0];
}

if ( 0 == strpos( $fileName, "." ) )
{
$url = substr( $this->URL, 0, strrpos( $fileName, "/" ) );
}
  
   $contents = @file_get_contents( $url . $fileName );

$s_filename = time()。 rand( 1000, 9999 ) 。 $ext_name;

//file_put_contents( $this->saveImagePath.$s_filename, $contents );

$handle = @fopen ( $this->saveImagePath.$s_filename, "w" );
@fwrite( $handle, $contents );
@fclose($handle);
if(filesize($this->saveImagePath.$s_filename)>3072){
$s_filename;
}else{
@unlink($this ->saveImagePath.$s_filename);
return "";
}

}

/*
* 画像をダウンロードしない場合は、パスを絶対パスとしてフォーマットします
画像ファイル
* @return $filename フォーマットされた画像パスを返します
*/
ToPath($imageURL)
{
$PathArray=parse_url($this->URL );
$webpath=$PathArray[スキーム]."://".$PathArray[ホスト] ;
$filepath=$PathArray[パス] ;
for ( $i = 0; $i {
if( substr( $imageURL[$i] ,0,1 )== '/' ){
                                                                             $filename[$i] =$webpath.$imageURL[$i];
}elseif( substr( $imageURL[$i] ,0,2 )== './' ){
$filename[$i] = $webpath.$filepath.substr( $imageURL[$i] ,1, strlen( $imageURL[$i]) );
}elseif( substr( $imageURL[$i] ,0 ,3 )== '.. /' ){
$index=strrchr($filepath,"/");
$filename[$i] =$webpath.substr($filepath,0,$index).substr($imageURL[$i] ,2 , strlen( $imageURL[$i]));
}elseif(substr( $imageURL[$i] ,0,4)== 'http'){
$filename[$i] =$imageURL[$i] ;
}else{

                                                                }
}

$filename を返します。                    

}

/**
* 画像がダウンロードされない場合は、ページ内のパスを新しいパスに置き換えます
* @param $content 置き換える必要があるページのコンテンツ
* @return String 置き換え後のページのコンテンツ
*/
function ImgPathReplace( $content )
{
for ( $i = 0; $i {
$content = str_replace( $this->ImageList[$i], $this->FileName[$i], $content );
}

return $content;               
}

function setURL ( $u )
{
$this->URL = $u;
return true;
}

function setStartFlag ( $s )
{
$this->startFlag = $s;
return true;
}

function setEndFlag ( $e )
{
$this->endFlag = $e;
return true;
}

function setSaveImagePath ( $p )
{
$this-&g t;画像パスを保存= $p;
return true;
}

function setImageURL ( $i )
{
$this->imageURL = $i;
return true;
}


}

?>



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