分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,WEBZIP也熄火,怎么扣取网页上的图片和背景图片呢。有时候,可能会想到用火狐,这款浏览器好像一个强大的BUG,文章有版权,屏蔽右键,火狐丝毫也不会被影响。
但是作为一个热爱php的开发者来说,更多的是喜欢自己动手。所以,我就写出了下面的一个源码,php远程抓取图片小程序。可以读取css文件并抓取css代码中的背景图片,下面这段代码也是针对抓取css中图片而编写的。
<?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(E_ERROR|E_WARNING);
//全局配置
$fromFile="aaa.css";//要抓取的文件
$savePath="ttttttttt";//保存路径
$fromDomain="http://www.xxx.com/";//要抓取的域名
//读取css样式并且分离出所有image的url
$str=file_get_contents($fromFile);
$strArr=explode("url(",$str);
$i=0;
foreach($strArras$val){
$val1=explode(")",$val);
if(strpos($val1[0],'jpg')||strpos($val1[0],'png')||strpos($val1[0],'gif'))
$imgUrl[$i++]=$val1[0];
}
//PS:上面可以用正则的,但是我觉得这样也不错
//开始抓取
foreach($imgUrlas$url){
if($url=="")continue;
$filename=$savePath.$url;
$url=$fromDomain.$url;
getImage($url,$filename);
}
functiongetImage($url,$filename){
ob_start();
$context=stream_context_create(
array(
'http'=>array(
'follow_location'=>false//don'tfollowredirects
)
)
);
//请确保php.ini中的fopenwrappers已经激活
readfile($url,false,$context);
$img=ob_get_contents();
ob_end_clean();
$fp2=@fopen($filename,"a");
fwrite($fp2,$img);
fclose($fp2);
echo$filename."ok√<br/>";
}
?>
然后没有意外的话,你会发现,你指定的文件夹下面已经满满的都是图片了,哈哈..
ps:php获取远程图片并下载保存到本地
分享一个利用php获取远程图片并将远程图片下载保存到本地的函数代码:
/*
*功能:php完美实现下载远程图片保存到本地
*参数:文件url,保存文件目录,保存文件名称,使用的下载方式
*当保存文件名称为空时则使用远程文件原来的名称
*/
functiongetImage($url,$save_dir='',$filename='',$type=0){
if(trim($url)==''){
returnarray('file_name'=>'','save_path'=>'','error'=>1);
}
if(trim($save_dir)==''){
$save_dir='./';
}
if(trim($filename)==''){//保存文件名
$ext=strrchr($url,'.');
if($ext!='.gif'&&$ext!='.jpg'){
returnarray('file_name'=>'','save_path'=>'','error'=>3);
}
$filename=time().$ext;
}
if(0!==strrpos($save_dir,'/')){
$save_dir.='/';
}
//创建保存目录
if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
returnarray('file_name'=>'','save_path'=>'','error'=>5);
}
//获取远程文件所采用的方法
if($type){
$ch=curl_init();
$timeout=5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$img=curl_exec($ch);
curl_close($ch);
}else{
ob_start();
readfile($url);
$img=ob_get_contents();
ob_end_clean();
}
//$size=strlen($img);
//文件大小
$fp2=@fopen($save_dir.$filename,'a');
fwrite($fp2,$img);
fclose($fp2);
unset($img,$url);
returnarray('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);
}
以上内容是小编给大家分享的PHP源码批量抓取远程网页图片并保存到本地的实现方法,希望大家喜欢。