PHP爬取页面图片,并保存为压缩包

一.用QueryList爬虫框架,先爬下所有图片,并保存到指定目录。代码如下:

$url="http://xxx.com";//示例域名 
//采集某页面所有的图片,find找到页面所有的img标签,获取src属性。
$data = QueryList::get($url)->find('img')->attrs('src');  
//$result返回的是一个数组,包含了所有的图片路径
$result=$data->all();
//调用图片打包方法,并返回下载链接。
echo packPhoto($result);

二.把图片打包成压缩包,并返回下载路径,同时删除图片:

//下载图片并且打包返回下载链接
function packPhoto($arr){
     foreach ($arr as $k=>$v){
    //此处判断图片链接是否为完整的地址,不是完整地址跳过(file_get_contents获取需要带域名地址) 
    if(CheckUrl($v)){
     //获取扩展名
    $ext='.'.end(explode('.',$v));
    //获取文件
    $img=file_get_contents($v);
     //保存文件
    file_put_contents('img/'.$k.$ext,$img);
     }         
    } 

//打包文件夹
$zip=new ZipArchive();
$name=uniqid();//文件名称
if($zip->open($name.'.zip', ZipArchive::CREATE)=== TRUE){
    //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    addFileToZip('img/', $zip); 
    $zip->close(); //关闭处理的zip文件
}


   $path='img';//图片所在路径
  //扫描一个文件夹内的所有文件夹和文件并返回数组
   $p = scandir($path);
   foreach($p as $val){
      //文件夹文件名字为'.'和‘..’,不要对他们进行操作
     if($val !="." && $val !=".."){ 
       unlink($path.'/'.$val);
     }
  }  
     //返回链接
   return $_SERVER['HTTP_HOST'].$name.'.zip';

}

三.对要打包的根目录进行操作:

//添加文件
function addFileToZip($path,$zip){
    $handler=opendir($path); //打开当前文件夹由$path指定。
    while(($filename=readdir($handler))!==false){
      //文件夹文件名字为'.'和‘..’,不要对他们进行操作
        if($filename != "." && $filename != ".."){
            if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
                addFileToZip($path."/".$filename, $zip);
            }else{ //将文件加入zip对象
                $zip->addFile($path."/".$filename);
            }
        }
    }
    @closedir($path);
}

四.上面用到的域名检测函数:

//检测域名格式
function CheckUrl($C_url){
    $str="/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/";
    if (!preg_match($str,$C_url)){
        return false;
    }else{
        return true;
    }
}

代码链接:https://gitee.com/linjinpeng/php_case/tree/master/爬取页面图片
在这里插入图片描述

你可能感兴趣的:(PHP,php)