分享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 Mysql日期和时间函数集合
Nov 16 PHP
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
Jan 30 PHP
PHP Document 代码注释规范
Apr 13 PHP
PHP XML操作类DOMDocument
Dec 16 PHP
用php实现选择排序的解决方法
May 04 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
PHP转换文本框内容为HTML格式的方法
Jul 20 PHP
PHP对象链式操作实现原理分析
Oct 09 PHP
PHP对象相关知识总结
Apr 09 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 PHP
使用php的mail()函数实现发送邮件功能
Jun 03 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连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
Open and Print a Word Document
2007/06/15 Javascript
Jquery选择器 $实现原理
2009/12/02 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
Express.JS使用详解
2014/07/17 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
说说node中的可读流和可写流的区别
2018/06/01 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
[48:53]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第一场
2014/05/26 DOTA
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
J2EE面试题集锦(附答案)
2013/08/16 面试题
小学生操行评语大全
2014/04/22 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
交通安全月活动总结
2015/05/08 职场文书
中学语文教学反思
2016/02/16 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书
警用民用对讲机找不同
2022/02/18 无线电
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis