分享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原理之Session Gc的一个小概率Notice
Apr 12 PHP
php多个字符串替换成同一个的解决方法
Jun 18 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
PHP与Java对比学习日期时间函数
Jul 03 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
PHP实现浏览器中直接输出图片的方法示例
Mar 14 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
PHP函数积累总结
Mar 19 PHP
基于laravel where的高级使用方法
Oct 10 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 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
MySQL 日期时间函数常用总结
2012/06/12 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
Python打印斐波拉契数列实例
2015/07/07 Python
python开发中module模块用法实例分析
2015/11/12 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
python的sorted用法详解
2019/06/25 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
医学专业职业生涯规划范文
2014/02/05 职场文书
物流专员岗位职责
2014/02/17 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
欢送会主持词
2015/07/01 职场文书
CAD实训总结范文
2015/08/03 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
多表查询、事务、DCL
2021/04/05 MySQL