分享PHP源码批量抓取远程网页图片并保存到本地的实现方法


Posted in PHP onDecember 01, 2015

做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,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($strArr as $val){
 $val1 = explode(")",$val);
 if(strpos($val1[0],'jpg')||strpos($val1[0],'png')||strpos($val1[0],'gif'))
 $imgUrl[$i++] = $val1[0];
 }
    //PS:上面可以用正则的,但是我觉得这样也不错
 //开始抓取
 foreach($imgUrl as $url){
 if($url=="") continue;
 $filename = $savePath.$url;
 $url = $fromDomain.$url;
 getImage($url,$filename);
 }
 function getImage($url,$filename){
 ob_start();
 $context = stream_context_create(
       array (
     'http' => array (
      'follow_location' => false // don't follow redirects
      )
     )
 );
 //请确保php.ini中的fopen wrappers已经激活
 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,保存文件目录,保存文件名称,使用的下载方式 
*当保存文件名称为空时则使用远程文件原来的名称 
*/ 
function getImage($url,$save_dir='',$filename='',$type=0){ 
  if(trim($url)==''){ 
    return array('file_name'=>'','save_path'=>'','error'=>1); 
  } 
  if(trim($save_dir)==''){ 
    $save_dir='./'; 
  } 
  if(trim($filename)==''){//保存文件名 
    $ext=strrchr($url,'.'); 
    if($ext!='.gif'&&$ext!='.jpg'){ 
      return array('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)){ 
    return array('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); 
  return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0); 
}

以上内容是小编给大家分享的PHP源码批量抓取远程网页图片并保存到本地的实现方法,希望大家喜欢。

PHP 相关文章推荐
PHP 组件化编程技巧
Jun 06 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
Jan 16 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
destoon二次开发入门示例
Jun 20 PHP
php的mssql数据库连接类实例
Nov 28 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
PHP实现的购物车类实例
Jun 17 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
php实现映射操作实例详解
Oct 02 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
Oct 10 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 PHP
基于php实现七牛抓取远程图片
Dec 01 #PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 #PHP
深入解析PHP中foreach语句控制数组循环的用法
Nov 30 #PHP
简单了解PHP编程中数组的指针的使用
Nov 30 #PHP
PHP 微信支付类 demo
Nov 30 #PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 #PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 #PHP
You might like
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
PHP反向代理类代码
2014/08/15 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
JavaScript中的高级函数
2018/01/04 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
[02:54]DOTA2英雄基础教程 撼地者
2014/01/14 DOTA
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
pandas apply多线程实现代码
2020/08/17 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
毕业留言寄语大全
2014/04/10 职场文书
员工合理化建议书
2014/05/19 职场文书
社会实践活动总结
2015/02/05 职场文书
超市采购员岗位职责
2015/04/07 职场文书
2016特色励志班级口号
2015/12/24 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
MySQL三种方式实现递归查询
2022/04/18 MySQL
mybatis-plus模糊查询指定字段
2022/04/28 Java/Android
Python采集壁纸并实现炫轮播
2022/04/30 Python