本文实例讲述了PHP封装的远程抓取网站图片并保存功能类。分享给大家供大家参考,具体如下:

<"|<a[^>]+href=['\" ]"" >]|U";
    preg_match_all($a_pattern, $content, $a_out, PREG_SET_ORDER);
    $tmp_arr=array(); //定义一个数组,用于存放当前循环下抓取图片的超链接地址
    foreach ($a_out as $k => $v)
    {
      /**
       * 去除超链接中的 空'','#','/'和重复值
       * 1: 超链接地址的值 不能等于当前抓取页面的url, 否则会陷入死循环
       * 2: 超链接为''或'#','/'也是本页面,这样也会陷入死循环,
       * 3: 有时一个超连接地址在一个网页中会重复出现多次,如果不去除,会对一个子页面进行重复下载)
       */
      if ( $v[1] && !in_array($v[1],self::$a_url_arr) &&!in_array($v[1],array('#','/',$capture_url) ) )
      {
        $tmp_arr[]=$v[1];
      }
    }
    foreach ($tmp_arr as $k => $v)
    {
      //超链接路径地址
      if ( strpos($v, 'http://')!==false ) //如果url包含http://,可以直接访问
      {
        $a_url = $v;
      }else  //否则证明是相对地址, 需要重新拼凑超链接的访问地址
      {
        $domain_url = substr($capture_url, 0,strpos($capture_url, '/',8)+1);
        $a_url=$domain_url.$v;
      }
      $this->recursive_download_images($a_url);
    }
  }
  /**
   * 下载当前网页下的所有图片
   *
   * @param  String $capture_url 用于抓取图片的网页地址
   * @return Array  当前网页上所有图片img标签url地址的一个数组
   */
  public function download_current_page_images($capture_url)
  {
    $content=@file_get_contents($capture_url);  //屏蔽warning错误
    //匹配img标签src属性中"|<img[^>]+src=['\" ]"" >]|U";
    preg_match_all($img_pattern, $content, $img_out, PREG_SET_ORDER);
    $photo_num = count($img_out);
    //匹配到的图片数量
    echo '<h1>'.$capture_url . "共找到 " . $photo_num . " 张图片</h1>";
    foreach ($img_out as $k => $v)
    {
      $this->save_one_img($capture_url,$v[1]);
    }
  }
  /**
   * 保存单个图片的方法
   *
   * @param String $capture_url  用于抓取图片的网页地址
   * @param String $img_url    需要保存的图片的url
   *
   */
  public function save_one_img($capture_url,$img_url)
  {
    //图片路径地址
    if ( strpos($img_url, 'http://')!==false )
    {
      // $img_url = $img_url;
    }else
    {
      $domain_url = substr($capture_url, 0,strpos($capture_url, '/',8)+1);
      $img_url=$domain_url.$img_url;
    }
    $pathinfo = pathinfo($img_url);  //获取图片路径信息
    $pic_name=$pathinfo['basename'];  //获取图片的名字
    if (file_exists($this->save_path.$pic_name)) //如果图片存在,证明已经被抓取过,退出函数
    {
      echo $img_url . '<span style="color:red;margin-left:80px">该图片已经抓取过!</span><br/>';
      return;
    }
    //将图片内容读入一个字符串
    $img_data = @file_get_contents($img_url);  //屏蔽掉因为图片地址无法读取导致的warning错误
    if ( strlen($img_data) > $this->img_size )  //下载size比限制大的图片
    {
      $img_size = file_put_contents($this->save_path . $pic_name, $img_data);
      if ($img_size)
      {
        echo $img_url . '<span style="color:green;margin-left:80px">图片保存成功!</span><br/>';
      } else
      {
        echo $img_url . '<span style="color:red;margin-left:80px">图片保存失败!</span><br/>';
      }
    } else
    {
      echo $img_url . '<span style="color:red;margin-left:80px">图片读取失败!</span><br/>';
    }
  }
} // END
set_time_limit(120);   //设置脚本的最大执行时间 根据情况设置
$download_img=new download_image('E:/images/',0);  //实例化下载图片对象
$download_img->recursive_download_images('http://www.oschina.net/');   //递归抓取图片方法
//$download_img->download_current_page_images($_POST['capture_url']);   //只抓取当前页面图片方法
"_blank" href="//www.jb51.net/Special/70.htm">php socket用法总结》、《php字符串(string)用法总结》、《PHP数学运算技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《PHP网络编程技巧总结》

希望本文所述对大家PHP程序设计有所帮助。

风云阁资源网 Design By www.bgabc.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
风云阁资源网 Design By www.bgabc.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。