可以直接把代码复制使用,使用方法:
zhuatu(网址,域名); 比如:zhuatu(‘http://www.tupianzj.com/tushuo/’,‘http://www.tupianzj.com/’);
此函数功能:能自动保存当前网页和其第一层子网页的图片(防爬的网页除外) ;相同的图片不会重复保存;图片会保存到此php文件的当前文件夹下的download文件夹里。
ps。如果只想获取当前页面图片,就把5~22行注释掉,解开25~28注释,就OK了。
废话不多说,上代码……
<?php
function zhuatu($src,$srcHead){
$html=file_get_contents($src);
//获取子网页图片
$patternHerf='<a.+?href=\"(.+?)\".*>';
preg_match_all($patternHerf,$html,$arr2);
$herfs=$arr2[1];
$herfs[]=$src;
$imgsAll=[];
for($w=0;$w<count($herfs);$w++){
$html=file_get_contents($herfs[$w]);
$pattern='/<img.*?src=[\"|\']?(.*?)[\"|\']?\s.*?>/i';
preg_match_all($pattern,$html,$arr);
$img=$arr[1];
$imgAll[]=$img;
}
foreach($imgAll as $val){
foreach($val as $v){
$imgAlls[]=$v;
}
}
//只获取当前网页图片
/*$html=file_get_contents($src);
$pattern='/<img.*?src=[\"|\']?(.*?)[\"|\']?\s.*?>/i';
preg_match_all($pattern,$html,$arr);
$imgAlls=$arr[1];*/
//开始动手抓图
$j=0;
$dir='';
$oldImgs=[];
for($i=0;$i<count($imgAlls);$i++){
if(strpos($imgAlls[$i],'http')===false){
//修改没有地址头的图片地址
$imgAlls[$i]=$srcHead.$imgAlls[$i];
}
//将抓取的图片地址加密,放在一个数组里,然后每次抓取检测数组里有无相同地址
if(isset($oldImgs[md5($imgAlls[$i])])){
echo "~~~~~~~~~~~该图片已抓取过~~~~~~~~~~~~\n";
continue;
}
$oldImgs[md5($imgAlls[$i])]=true; //存为key是因为可以用isset检测,isset效率比较高
$img=file_get_contents($imgAlls[$i]);
if($img!=false){
$j++;
echo "++++++++++++正在抓取第".$j."张图片++++++++++++++\n";
}else{
echo "++++++++++++抓取第".$j."张图片失败++++++++++++++\n";
continue;
}
$imginfos=getimagesize($imgAlls[$i]);
$info=substr($imginfos['mime'],6);
$ran=ran1();
//如果不存在download文件夹则创建
if(!is_dir('./download')){
mkdir('./download',0777);
}
$ret=file_put_contents('./download/'.$j.'__'.$ran.'.'.$info,$img); //失败返回false
if($ret!=false){
echo "===============保存第".$j."张图片成功===============\n";
}else{
echo "++++++++++++保存第".$j."张图片失败++++++++++++++\n";
}
}
echo "===============抓取所有网页图片完成!===============\n";
}
//随机函数
function ran1(){
$ranstr='qwertyuiopasdfghjklzxcvbnm7894561230';
$len1=strlen($ranstr);
$str='img';
for($q=0;$q<8;$q++){
$num=rand(0,$len1-1);
$str=$str.$ranstr[$num];
}
return $str;
}
$src='http://textile-218-m.view.sitestar.cn/page1000010?product_id=5';
$srcHead='https://www.sitestar.cn/';
zhuatu($src,$srcHead);