首頁 > 後端開發 > php教程 > 網頁抓圖

網頁抓圖

WBOY
發布: 2016-07-25 08:49:44
原創
1169 人瀏覽過
  1. header('Content-Type:text/html;charset=utf-8');
  2. /**
  3. * 一個用來抓去圖片的類別
  4. * @author tangpan
  5. * /
  6. class download_image {
  7. public $_save_path = NULL; //圖片儲存路勁
  8. public $_limit_size = NULL; //圖片限制大小
  9. public static $_img_url_old = array() //儲存已抓取過的圖片連結位址
  10. public static $_a_page_url = array(); //儲存抓取過的頁面
  11. public function __construct( $_save_path, $_limit_size) {
  12. $this-> _save_path = $_save_path;
  13. $this->_limit_size = $_limit_size;
  14. }
  15. public function get_all_page_image( $site_url ) {
  16. if > return false;
  17. }
  18. if ( ! in_array( $site_url, self::$_a_page_url ) ) { //判斷目前頁面是否抓取過
  19. self::$_a_page_url[] = $site_url; //將超連結存入靜態陣列
  20. } else {
  21. return; //若抓取過則跳出
  22. }
  23. $this->download_the_page_image( $site_url );
  24. $ content = @file_get_contents($site_url);
  25. $a_page_url = "|] href=['" ]?([^ '"?] )['" >]|U";
  26. $all_url = array();
  27. preg_match_all( $a_page_url, $content, $all_url, PREG_SET_ORDER );
  28. if ( $all_url != NULL ) {
  29. foreach( $all_url as $all_url ) {
  30. /**
  31. * 靜態化超鏈接,防止進入死循環
  32. * 出去當前頁面鏈接表示方式('','#','/')
  33. */
  34. if ( trim($val[1]) != '' && ! in_array( $val[1], self::$_a_page_url ) && ! in_array( $val[1], array('#','/',$site_url) ) ) {
  35. self::$_a_page_url[] = $val[1]; //將符合要求的超連結寫入靜態陣列中
  36. }
  37. }
  38. }
  39. if ( self::$_a_page_url != NULL ) {
  40. foreach( self::$_a_page_url as $keys => $vals ) {
  41. if ( strpos( $vals, 'http://' ) === false ) { //超連結不包含http://時,不能直接存取
  42. // 當圖片連結位址為相對位址是重新拼湊位址
  43. $a_domain_url = substr( $site_url, 0, strpos( $site_url, '/',8 ) 1 );
  44. $a_img_url = $a_domain_url.$vals;
  45. $a_img_url = $a_domain_url.$vals;
  46. }
  47. //遞歸調用,訪問每一個超連結頁面
  48. $this->get_all_page_image( $a_img_url );
  49. }
  50. }
  51. }
  52. /**
  53. * 下載目前頁面下的所有圖片連結
  54. * @param $site_url
  55. //
  56. public function download_the_page_image( $site_url ) {
  57. // 所有取得目前連結位址頁的內容
  58. $img_pattern = NULL;
  59. $content = @file_get_contents( $site_url );
  60. $content = @file_get_contents( $site_url );"] src=['" ]?([^ '"?] )['" >]|U";
  61. //全域符合所有的網頁抓圖中的圖片連結
  62. $img_out = array();
  63. preg_match_all( $img_pattern, $content, $img_out, PREG_SET_ORDER );
  64. echo '

    '. $site_url . '共找到' . count($img_out) . '張圖片

    ';
  65. //print_r($img_out[1]);
  66. foreach( $img_out as $key => $val ) {
  67. //echo htmlspecialchars($val[1] ).'
    ';
  68. $this->save_one_image( $site_url, $val[1]);
  69. }
  70. }
  71. public function save_one_image( site_url, $img_url ) {
  72. if ( strpos( $img_url, 'http://' ) === false ) {
  73. // 當圖片連結位址為相對位址是重新拼湊位址
  74. $domain_url = substr( $site_url, 0, strpos( $site_url, '/',8 ) 1 );
  75. $img_url = $domain_url.$img_url;
  76. }
  77. $pic_name = basename( $img_url ); //取得圖片名稱
  78. if ( in_array( $img_url, self::$_img_url_old ) ) {
  79. echo $img_url .'">圖片已經抓取過!
    ';
  80. return;
  81. }
  82. //取得圖片內容,並寫入一個字串
  83. $img_data = @file_get_contents( $img_url );
  84. if ( strlen($img_data) _limit_size ) { //圖片大小在限制範圍內
  85. $img_boo = @file_put_contents( $this->_save_path.md5(microtime()).$pic_name, $img_data );
  86. if ( $img_boo ) {
  87. echo $img_url .' 圖片儲存成功!
    ';
  88. self::$_img_url_old[] = $img_url;
  89. } else {
  90. echo $img_url .'圖片保存失敗!
    ';
  91. }
  92. } else {
  93. echo $img_url .'圖片大小在限制範圍之外!
    ';
  94. }
  95. }
  96. }
  97. set_time_limit(0);
  98. $download_images = new download_image('surces_Img/',1024*1024*100) ;
  99. $download_images->get_all_page_image('http://www.22mm.cc/');
  100. ?>
複製代碼


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板