这几天真的是躺中枪,经历了学校断电断网等一系列操作,又要面临新浪图床的折磨⌇●﹏●⌇。做为一位新浪图床的忠诚使用者,本站的一系列图片都存在的上面,现在那边不给调用了,郁闷Σ(っ °Д °;)っ。特地做了下面这个小程序,想要做一个自己的图库。
说明:
1.网络好的情况下5分钟可以爬取下载千余张图片到本地
2.一键获取下载完成的文件名
有服务器的可以爬完自己做图片API的
图片API源码下载地址:https://www.lanzous.com/i3wybkf

代码1 下载器 dow.php

<?php
set_time_limit(36000);//临时改变程序最长执行时间
function download($url,$_name){
    $state = @file_get_contents($url,0,null,0,1);//获取网络资源的字符内容
    if($state){
        $ext = pathinfo($url,PATHINFO_EXTENSION);
        $dir = './img/';//图片储存地址
        $allow_type = array('jpg','jpeg','gif','png'); //图片类型
        if(in_array($ext, $allow_type)){//判断不是图片接口
            $filename = $dir.$_name.'.'.$ext;//一般图片文件名称生成
        }else{
              $filename = $dir.$_name.'.png';//API图片文件名称生成
        }
        if(!file_exists($dir)){
            return false;
        }else{
               ob_start();//打开输出
            readfile($url);//输出图片文件
            $img = ob_get_contents();//得到浏览器输出
            ob_end_clean();//清除输出并关闭
            $size = strlen($img);//得到图片大小
            $fp2 = @fopen($filename, "a");
            fwrite($fp2, $img.'png');//向当前目录写入图片文件,并重新命名
            fclose($fp2);
            return $filename;//输出图片储存地址
        }
    }else{
        return false;
    }
}
function str_re($str){//处理特殊字符
  $str = str_replace(' ', "", $str);
  $str = str_replace("\n", "", $str);
  $str = str_replace("\t", "", $str);
  $str = str_replace("\r", "", $str);
  return $str;
}
$str = explode("\n", file_get_contents('./dm/nanjie.txt'));//获取数据源
$k=count($str);//统计条数
$j = $k/90;//获取循环次数(一组90条测试时相对比较稳定)
echo $j."<br>";
for ($i=0; $i <= $j ; $i++) { 
    $shu = 90*$i;//获取子循环总数
    $cis = 90*($i+1);//获取子循环初始数
    for ($n=$shu; $n < $cis ; $n++) { 
        $sina_img = str_re($str[$n]);//获取指定数据
        $url = 'http://ws2.sinaimg.cn/large/'.$sina_img.'.jpg';//设置链接
        echo download($url,$sina_img).'   '.$n.'<br>';//下载数据
    }
    echo $i.'  '.$shu.'   '.$n." <br>";//输出当前组
}

代码2 文件名获取 name.php

<?php
//打开当前目录下的目录pic下的子目录common。
$handler = opendir('img');
/*其中$filename = readdir($handler)
每次循环时将读取的文件名赋值给$filename,$filename !== false。
一定要用!==,因为如果某个文件名如果叫'0′,或某些被系统认为是代表false,用!=就会停止循环
*/
while( ($filename=readdir($handler))!==false){
 //略过linux目录的名字为'.'和‘..'的文件
 if($filename != "." && $filename != ".."){  
  //输出文件名
   echo $filename."<br>";
  }
}
closedir($handler);

转载请注明出处,原文地址:https://www.lykep.com/index.php/archives/254/

Last modification:September 19th, 2019 at 05:01 pm
如果觉得我的文章对你有用,请随意赞赏