当前位置:首页 > PHP教程 > php高级应用 > 列表

分享PHP源码批量抓取远程网页图片并保存到本地的实现方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-27 17:06:03 浏览: 评论:0 

本篇文章给大家分享PHP源码批量抓取远程网页图片并保存到本地的实现方法,对批量抓取网页图片相关知识感兴趣的朋友一起学习吧。

做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,WEBZIP也熄火,怎么扣取网页上的图片和背景图片呢。有时候,可能会想到用火狐,这款浏览器好像一个强大的BUG,文章有版权,屏蔽右键,火狐丝毫也不会被影响。

但是作为一个热爱php的开发者来说,更多的是喜欢自己动手。所以,我就写出了下面的一个源码,php远程抓取图片小程序。可以读取css文件并抓取css代码中的背景图片,下面这段代码也是针对抓取css中图片而编写的。

  1. <?php 
  2.  header("Content-Type: text/html; charset=utf-8"); 
  3.     error_reporting(E_ERROR|E_WARNING); 
  4.  //全局配置 
  5.  $fromFile = "aaa.css";  //要抓取的文件 
  6.  $savePath = "ttttttttt";  //保存路径 
  7.  $fromDomain = "http://www.xxx.com/"; //要抓取的域名 
  8.  //读取css样式并且分离出所有image的url 
  9.  $str = file_get_contents($fromFile); 
  10.  $strArr = explode("url(",$str);  
  11.  $i = 0; 
  12.  foreach($strArr as $val){ 
  13.  $val1 = explode(")",$val); 
  14.  if(strpos($val1[0],'jpg')||strpos($val1[0],'png')||strpos($val1[0],'gif')) 
  15.  $imgUrl[$i++] = $val1[0]; 
  16.  } 
  17.     //PS:上面可以用正则的,但是我觉得这样也不错 
  18.  //开始抓取 
  19.  foreach($imgUrl as $url){ 
  20.  if($url==""continue
  21.  $filename = $savePath.$url
  22.  $url = $fromDomain.$url
  23.  getImage($url,$filename); 
  24.  } 
  25.  function getImage($url,$filename){ 
  26.  ob_start(); 
  27.  $context = stream_context_create( 
  28.        array ( 
  29.      'http' => array ( 
  30.       'follow_location' => false // don't follow redirects 
  31.       ) 
  32.      ) 
  33.  ); 
  34.  //请确保php.ini中的fopen wrappers已经激活 
  35.  readfile( $url,false,$context); 
  36.  $img = ob_get_contents(); 
  37.         ob_end_clean(); 
  38.  $fp2 = @fopen($filename,"a"); 
  39.  fwrite($fp2,$img); 
  40.  fclose($fp2); 
  41.  echo $filename." ok √<br/>"
  42.  } 
  43. ?> 

然后没有意外的话,你会发现,你指定的文件夹下面已经满满的都是图片了,哈哈..

ps:php获取远程图片并下载保存到本地

分享一个利用php获取远程图片并将远程图片下载保存到本地的函数代码:

  1. /*  
  2. *功能:php完美实现下载远程图片保存到本地  
  3. *参数:文件url,保存文件目录,保存文件名称,使用的下载方式  
  4. *当保存文件名称为空时则使用远程文件原来的名称  
  5. */ 
  6. function getImage($url,$save_dir='',$filename='',$type=0){  
  7.   if(trim($url)==''){  
  8.     return array('file_name'=>'','save_path'=>'','error'=>1);  
  9.   }  
  10.   if(trim($save_dir)==''){  
  11.     $save_dir='./';  
  12.   }  
  13.   if(trim($filename)==''){//保存文件名  
  14.     $ext=strrchr($url,'.');  
  15.     if($ext!='.gif'&&$ext!='.jpg'){  
  16.       return array('file_name'=>'','save_path'=>'','error'=>3);  
  17.     }  
  18.     $filename=time().$ext;  
  19.   }  
  20.   if(0!==strrpos($save_dir,'/')){  
  21.     $save_dir.='/';  
  22.   }  
  23.   //创建保存目录  
  24.   if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){  
  25.     return array('file_name'=>'','save_path'=>'','error'=>5);  
  26.   }  
  27.   //获取远程文件所采用的方法  
  28.   if($type){  
  29.     $ch=curl_init();  
  30.     $timeout=5;  
  31.     curl_setopt($ch,CURLOPT_URL,$url);  
  32.     curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);  
  33.     curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);  
  34.     $img=curl_exec($ch);  
  35.     curl_close($ch);  
  36.   }else{  
  37.     ob_start();  
  38.     readfile($url);  
  39.     $img=ob_get_contents();  
  40.     ob_end_clean();  
  41.   }  
  42.   //$size=strlen($img);  
  43.   //文件大小  
  44.   $fp2=@fopen($save_dir.$filename,'a');  
  45.   fwrite($fp2,$img);  
  46.   fclose($fp2);  
  47.   unset($img,$url);  
  48.   return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);  

以上内容是小编给大家分享的PHP源码批量抓取远程网页图片并保存到本地的实现方法,希望大家喜欢。

Tags: PHP源码批量抓取远程图片

分享到: