PHP#用php写一个“爬”网图小工具

可以直接把代码复制使用,使用方法:
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);
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值