PHP網頁抓圖

nepe 9年前發布 | 2K 次閱讀 PHP

 
<?php
header('Content-Type:text/html;charset=utf-8');

/**

  • 一個用于抓去圖片的類 */ class download_image { public $_save_path = NULL; //圖片保存路勁 public $_limit_size = NULL; //圖片限制大小 public static $_img_url_old = array(); //存儲已抓取過的圖片鏈接地址 public static $_a_page_url = array(); //存儲抓取過的頁面 public function __construct( $_save_path, $_limit_size) {

     $this->_save_path = $_save_path;
     $this->_limit_size = $_limit_size;
    

    }

    public function get_all_page_image( $site_url ) {

     if ( $site_url == '' ) {
         return false;
     }
     if ( ! in_array( $site_url, self::$_a_page_url ) ) {  //判斷當前頁面是否抓取過
         self::$_a_page_url[] = $site_url;   //將超鏈接存入靜態數組中
     } else {
         return;     //若抓取過則跳出
     }
     $this->download_the_page_image( $site_url );
     $content = @file_get_contents($site_url);
     $a_page_url = "|<a[^>]+href=['\\" ]?([^ '\\"?]+)['\\" >]|U";
     $all_url = array();
     preg_match_all( $a_page_url, $content, $all_url, PREG_SET_ORDER );
     if ( $all_url != NULL ) {
         foreach( $all_url as $key => $val ) {
             /**
              * 靜態化超鏈接,防止進入死循環
              * 出去當前頁面鏈接表示方式('','#','/')
              */
             if ( trim($val[1]) != '' && ! in_array( $val[1], self::$_a_page_url ) && ! in_array( $val[1], array('#','/',$site_url) ) ) {
                 self::$_a_page_url[] = $val[1];   //將符合要求的超鏈接寫入靜態數組中
             } 
         }
     }
     if ( self::$_a_page_url != NULL ) {
         foreach( self::$_a_page_url as $keys => $vals ) {
             if ( strpos( $vals, 'http://' ) === false ) { //超鏈接不包含http://時,不能直接訪問
                 // 當圖片鏈接地址為相對地址是重新拼湊地址
                 $a_domain_url = substr( $site_url, 0, strpos( $site_url, '/',8 ) + 1 );
                 $a_img_url = $a_domain_url.$vals; 
             }
             //遞歸調用,訪問每一個超鏈接頁面
             $this->get_all_page_image( $a_img_url );
         }
     }
    

    }

    /**

    • 下載當前頁面下的所有圖片鏈接
    • @param $site_url <頁面地址> */ public function download_the_page_image( $site_url ) { // 獲取當前鏈接地址頁面的所有內容 $img_pattern = NULL; $content = @file_get_contents( $site_url ); $img_pattern = "|<img[^>]+src=['\" ]?([^ '\"?]+)['\" >]|U"; //全局匹配所有的<img >中的圖片鏈接 $img_out = array(); preg_match_all( $img_pattern, $content, $img_out, PREG_SET_ORDER ); echo '<h1>'. $site_url . '共找到' . count($img_out) . '張圖片</h1>'; //print_r($img_out[1]); foreach( $img_out as $key => $val ) {

       //echo htmlspecialchars($val[1]).'<br />';
       $this->save_one_image( $site_url, $val[1]);
      

      }

      }

      public function save_one_image( $site_url, $img_url ) { if ( strpos( $img_url, 'http://' ) === false ) {

       // 當圖片鏈接地址為相對地址是重新拼湊地址
       $domain_url = substr( $site_url, 0, strpos( $site_url, '/',8 ) + 1 );
       $img_url = $domain_url.$img_url; 
      

      } $pic_name = basename( $img_url ); //獲取圖片名稱

      if ( in_array( $img_url, self::$_img_url_old ) ) {

       echo $img_url .'<span style="color:red;margin-left:50px">該圖片已經抓取過!</span><br/>';
       return;
      

      } //獲取圖片內容,并寫入一個字符串 $img_data = @file_get_contents( $img_url ); if ( strlen($img_data) < $this->_limit_size ) { //圖片大小在限制范圍內

       $img_boo = @file_put_contents( $this->_save_path.md5(microtime()).$pic_name, $img_data );
       if ( $img_boo ) {
           echo $img_url .'<span style="color:green;margin-left:50px;">圖片保存成功!</span><br/>';
           self::$_img_url_old[] = $img_url;
       } else {
           echo $img_url .'<span style="color:red;margin-left:50px;">圖片保存失敗!</span><br />';
       }
      

      } else {

       echo $img_url .'<span style="color:red;margin-left:50px;">圖片大小在限制范圍之外!</span><br />';
      

      } } } set_time_limit(0); $download_images = new download_image('surces_Img/',10241024100); $download_images->get_all_page_image('

</pre>

 本文由用戶 nepe 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!