分享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 相关文章推荐
smarty实例教程
Nov 19 PHP
php中变量及部分适用方法
Mar 27 PHP
php discuz 主题表和回帖表的设计
Mar 13 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
深入php-fpm的两种进程管理模式详解
Jun 03 PHP
php之Memcache学习笔记
Jun 17 PHP
PHP实现图片旋转效果实例代码
Oct 01 PHP
PHP间隔一段时间执行代码的方法
Dec 02 PHP
Symfony的安装和配置方法
Mar 17 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
探究Laravel使用env函数读取环境变量为null的问题
Dec 06 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
使用PHP获取网络文件的实现代码
2010/01/01 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
laravel-admin 实现在指定的相册下添加照片
2019/10/21 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
javascript实现图片轮播代码
2019/07/09 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
JavaScript this关键字的深入详解
2021/01/14 Javascript
Python实现简单多线程任务队列
2016/02/27 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
Django中使用Celery的方法示例
2018/11/29 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
运动会广播稿300字
2014/01/10 职场文书
淘宝好评语句大全
2014/12/31 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
MySQL笔记 —SQL运算符
2022/01/18 MySQL
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电